ng 测试:抛出 [对象错误事件]



我正在使用Angular 6.

跑步时

ng test

我收到类似错误

ResetPasswordComponent should create
[object ErrorEvent] thrown

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

未捕获错误:未捕获(承诺中(:错误:无法匹配任何路由。网址细分:"身份验证/登录">

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的模块。

AuthModuleauth-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>

在这一点上,这可能与 OP 无关,但对于遇到类似问题的任何人来说,对于其他相关问题提供的解决方案都没有工作或适用,我将把这个留在这里。

与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:

如果您有 FirstComponent、SecondComponent 和 ThirdComponent 的规范,但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 {}

我希望这可以节省一些时间。我为此浪费了几个小时,主要是因为我把失败报告看得太字面了。

最新更新