我正在使用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
的模块。
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>
在这一点上,这可能与 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 {}
我希望这可以节省一些时间。我为此浪费了几个小时,主要是因为我把失败报告看得太字面了。