![](/img/trans.png)
[英]Unit test Angular 4 getting error `TypeError: Cannot read property 'subscribe' of undefined`
[英]Angular unit testing TypeError: Cannot read property 'subscribe' of undefined
我正在使用auth创建一个入门工具包模板,并使用CRUD创建一个示例( https://github.com/fransyozef/basic-login-angular )
现在,我是单元测试的新手,我正在努力使创建组件的测试至少运行。 但是我被困住了
TypeError: Cannot read property 'subscribe' of undefined
我认为错误来自
resolveRoute() {
this.route.params.subscribe(params => {
if (params['id']) {
this.id = +params['id'];
this.getItem();
} else {
this.handleItemNotFound();
}
});
}
现在我有测试文件: https : //github.com/fransyozef/basic-login-angular/blob/master/src/app/items/item-edit/item-edit.component.spec.ts
有人可以帮我这个忙吗?
您应该模拟自己的路由策略。 如我所见,您在TestBed imports
使用了routingModule
。 假设您自己的 routingModule
仅提供您自己的路由,并且将无法模拟/监视其他路由。 因此,我鼓励您首先调整test.helper.ts
Test helper routes
export const TestRoutingImports = [
HttpClientTestingModule,
RouterTestingModule, // <-- Use RouterTestingModule instead
];
(RouterTestingModule)模块设置要用于测试的路由器。 它提供了Location,LocationStrategy和NgModuleFactoryLoader的间谍实现。
RouterTestingModule提供模拟,RouterModule不提供。
您应该做的第二件事是从测试平台上删除您的provide
。 这里没有必要。 我的意思是以下部分:
{
provide: ActivatedRoute, useValue: {
snapshot: { params: { id: 1 } }
}
},
删除它,因为这将覆盖组件提供程序。 在您的情况下,则不需要。
希望我能为您服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.