我试图在unit test
中写Angular 4.3.6
。
我已经查看了以下参考资料:
How to mock an activatedRoute parent Route in angular2 for testing purposes?
事情是 - 我不认为(我可能完全错了)我应该在这种情况下模仿ActivatedRoute
,例如:
我有一个子组件,它与父激活的路由有subscribe
,如下所示:
// children.component.ts
ngOnInit() {
this.activatedRoute.parent.paramMap
.map(m => m.get("contractId"))
.distinctUntilChanged()
.subscribe(contractId => {
console.log(contractId);
});
}
现在我想写下面的测试:
should call the parent subscription when contractId changes
it("should call the parent subscription when contractId changes", fakeAsync(() => {
// Initializes route with contractId 1000
router.navigate(["1000", "Parent", "Children"]);
tick();
fixture.detectChanges(); // this calls ngOnInit
// changes the contractId to 2000
router.navigate(["2000", "Parent", "Children"]);
tick();
expect(component.contractId).toBe("2000");
}));
我收到以下错误:
TypeError:无法读取属性' paramMap'为null
我为此发布了一个关于此事的人:https://plnkr.co/edit/2SXzvSDe3OiwvvRJYXfN?p=preview
请注意,在plunker中我写了两个测试。第一个运行正常,所以路由器正在运行。
如何在单元测试中观察路线的变化以及为什么parent
为空?
修改
我使用基于ActivatedRouteStub的模拟ActivatedRoute
更新了我的plunker。然后我现在得到以下错误:
TypeError:无法读取属性' paramMap'未定义的
这可能是因为存根没有定义父级,因此它未定义。
我可以在模拟中定义一个parent
属性,但这是正确的吗?