我正在使用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();
}
});
}
中
现在我有了testfile: https://github.com/fransyozef/basic-login-angular/blob/master/src/app/items/item-edit/item-edit.component.spec.ts
有人可以帮我吗?
答案 0 :(得分:1)
您应该模拟自己的路由策略。如我所见,您在routingModule
中使用了TestBed imports
。假设您的拥有 routingModule
仅提供您自己的路线,而无法模拟/监视其他路线。因此,我鼓励您先在Test helper routes
内调整test.helper.ts
export const TestRoutingImports = [
HttpClientTestingModule,
RouterTestingModule, // <-- Use RouterTestingModule instead
];
(RouterTestingModule)模块设置要用于测试的路由器。它提供了Location,LocationStrategy和NgModuleFactoryLoader的间谍实现。
RouterTestingModule提供模拟,而RouterModule不提供模拟。
您应该做的第二件事是从测试平台上删除provide
。这里没有必要。我的意思是以下部分:
{
provide: ActivatedRoute, useValue: {
snapshot: { params: { id: 1 } }
}
},
删除此内容,因为这将是组件提供程序的替代。在您的情况下,则不需要。
希望我能为您提供帮助。