【问题标题】:ng test: [object ErrorEvent] thrownng 测试:[object ErrorEvent] 抛出
【发布时间】:2019-05-17 23:37:35
【问题描述】:

我正在使用Angular 6

运行中

ng test

我遇到了类似的错误

ResetPasswordComponent should create
[object ErrorEvent] thrown

在窗口控制台中,它正在给

未捕获的错误:未捕获(在承诺中):错误:无法匹配任何路由。 URL 段:'auth/login'

Error: Cannot match any routes. URL Segment: 'auth/login'
at ApplyRedirects.noMatchError (VM4374 router.js:1455)
at CatchSubscriber.eval [as selector] (VM4374 router.js:1436)
at CatchSubscriber.error (VM4260 catchError.js:40)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at TapSubscriber._error (VM4280 tap.js:67)
at ApplyRedirects.noMatchError (VM4374 router.js:1455)
at CatchSubscriber.eval [as selector] (VM4374 router.js:1436)
at CatchSubscriber.error (VM4260 catchError.js:40)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at TapSubscriber._error (VM4280 tap.js:67)
at resolvePromise (VM4143 zone.js:813)
at resolvePromise (VM4143 zone.js:770)
at eval (VM4143 zone.js:872)
at ZoneDelegate.invokeTask (VM4143 zone.js:420)
at ProxyZoneSpec.onInvokeTask (VM4148 zone-testing.js:318)
at ZoneDelegate.invokeTask (VM4143 zone.js:419)
at Object.onInvokeTask (VM4143 zone.js:298)
at ZoneDelegate.invokeTask (VM4143 zone.js:419)
at Object.onInvokeTask (VM4151 core.js:4109)
at ZoneDelegate.invokeTask (VM4143 zone.js:419)
at 

我创建了 auth 模块,其中包含组件 ResetPasswordComponent

AuthModule 导入到 auth-layout 模块中,路由定义在 auth-layout 模块中。

AuthModule的内容

@NgModule({
  imports: [
    CommonModule,
    ReactiveFormsModule,
    FormsModule,
    RouterModule
  ],
  declarations: [
    LoginComponent,
    LogoutComponent,
    ForgotPasswordComponent,
    ResetPasswordComponent
  ],
  exports: [
    LoginComponent,
    ForgotPasswordComponent,
    ResetPasswordComponent,
    LogoutComponent
  ]
})
export class AuthModule { }

组件文件中没有auth/login

reset-password.component.html文件有一行

<a routerLink="/auth/login">Login</a>

【问题讨论】:

    标签: angular angular6 angular-test


    【解决方案1】:

    此时这可能与 OP 无关,但对于遇到类似问题的任何人,以及为 other related questions 提供的解决方案都没有工作或适用的任何人,我会离开这个在这里。

    与 OP 一样,我在 Jasmine 窗口中出现了 [object ErrorEvent] thrown 错误,并且在控制台中出现了伴随错误:

    Uncaught Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'members'
    Error: Cannot match any routes. URL Segment: 'members'
    at ApplyRedirects.push../node_modules/@angular/router/fesm5/router.js.ApplyRedirects.noMatchError
    ...
    

    与 OP 一样,错误中引用的路径在规范或规范所属的组件中没有引用

    在多次尝试修复错误后,我最终决定禁用该规范。然后错误转移到下一个规范。因此,我检查了在报告为“失败”之前运行的规范和组件。果然,在前面的组件中,错误中有对路径的引用,但是它的规范没有在RouterTestingModule.withRoutes 调用中注册路径。

    TLDR:

    如果您有 FirstComponentSecondComponentThirdComponent 的规范,但 ThirdComponent 在与上述类似的情况下失败,则 检查 SecondComponent 以查看路由是否在此处被引用。如果是,请创建一个存根组件,声明它,并将其添加到您的 RouterTestingModule.withRoutes 导入中,并使用缺少的路由。例如

    ...
    
    describe('SecondComponent', () => {
      beforeEach(() => {
        TestBed.configureTestingModule({
          imports: [
    RouterTestingModule.withRoutes([{path:'missing/path',component:SecondComponent}])
          ],
          declarations: [ SecondComponent ]
        })
      })
    
      ...
    
    })
    
    @Component({selector:'app-second',template:''})
    class SecondComponent {}
    

    我希望这可以节省一些时间。我在这件事上浪费了几个小时,主要是因为我太按字面意思理解了失败报告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 2019-01-20
      • 2018-10-31
      • 1970-01-01
      • 2019-05-05
      • 2018-01-25
      相关资源
      最近更新 更多