Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在测试angular 2应用程序时正确使用SharedModules和Router?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用routerLink和routerLinkActive对(angular 2)组件进行单元测试,但所有测试用例都会失败,并显示以下错误消息. (注意:我已经删除了路由器和其他相关的依赖项.这是我用于相同的 reference.).

我还注意到,当从我的模板中删除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,请注明来意。