大佬教程收集整理的这篇文章主要介绍了如何在测试angular 2应用程序时正确使用SharedModules和Router?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我还注意到,当从我的模板中删除routerLink和routerLinkActive时,所有测试用例都将运行而没有任何错误.
我认为错误是由RouterTesTingModule或SharedModule(包含用于显示和验证密码输入字段的组件)引起的.所以我尝试删除或添加它们以找到实际导致问题的原因.这是我观察到的.
>我得到’无法读取属性’订阅’undefined’如果
存在RouterTesTingModule或SharedModule.
>只有当我删除了RouterTesTingModule和SharedModule时,我才会收到任何链接到路由器的错误,但是共享模块中的元素不会被加载到组件中,并且某些测试用例仍然因此而失败.
TESTBed配置:
TESTBed.configureTesTingModule({ imports: [CoreModule,SharedModule,RouterTesTingModule],declarations: [ MyComponent,RouterLinkstubDirective,RouterOutletstubComponent ],providers: [ FormBuilder,{ provide: Router,useClass: Routerstub },{ provide: ActivatedRoute,userClass: ActivatedRoutestub} ],scheR_8_11845@as: [NO_ERRORS_scheR_8_11845@A] }) .overrideComponent(MyComponent,{ set: { providers: [ {provide: AuthModel,useClass: mockAuthModel} ],} }) .compileComponents(); }));
ActivatedRouterstub:
@Injectable() export class ActivatedRoutestub { // ActivatedRoute.params is Observable private subject = new BehaviorSubject(this.testParams); params = this.subject.asObservable(); // Test parameters private _testParams: {}; get testParams() { return this._testParams; } set testParams(params: {}) { this._testParams = params; this.subject.next(params); } // ActivatedRoute.snapshot.params get snapshot() { return { params: this.testParams }; } }
我应该做些什么改变来解决这个问题?
>正如我在评论中提到的,routerLink仅适用于真正的路由器.所以我们需要包括RouterTesTingModule(包括.withRoutes([{path:’some / path’,component:someComponent}]),如果你打算在测试时点击它).
>如果我们已经添加了RouterTesTingModule,我们不需要单独提供路由器依赖项.所以我删除了我提供的Router和ActivatedRoute依赖项.现在,错误从无法读取未定义的属性’subscribe’变为无法读取null的属性’outlets’.
>我found out当routerLink指向空变量时发生此错误.在我的例子中,由于隔离的测试环境,我分配给routerLink的名为favoriteUrl的属性为null.所以我手动为beforeEach函数中的属性赋值,这解决了问题,至少对我来说.
感谢所有试图帮助的人!
以上是大佬教程为你收集整理的如何在测试angular 2应用程序时正确使用SharedModules和Router?全部内容,希望文章能够帮你解决如何在测试angular 2应用程序时正确使用SharedModules和Router?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。