在我的Angular 4组件中,我有类似以下的东西:
constructor(private route: ActivatedRoute) {
}
ngOnInit() {
this.myId = this.route.snapshot.params['myId'];
}
我正在尝试创建一个模拟,它应该看起来像下面这样:
And I'm trying to create a mock that suppose to look like follows:
class MockActivatedRoute extends ActivatedRoute {
public params = Observable.of({ myId: 123 });
}
我的测试失败,显示如下错误:
TypeError: Cannot read property 'params' of undefined.
我该如何模拟它?我是否误解了ActivatedRoute
的正确使用方法,应该在组件中更好地使用router.subscribe
?我看到一些复杂的例子,在这些例子中人们模拟快照本身,但对我而言这看起来太过复杂。
测试本身非常简单:
describe('ngOnInit', () => {
it('should set up initial state properly',
() => {
const component = TestBed.createComponent(MyComponent).componentInstance;
component.ngOnInit();
expect(component.myId).toEqual('123');
});
});
如果我只是将测试中的一个方法更改为以下内容-测试就能正常工作:
ngOnInit() {
//this.myId = this.route.snapshot.params['myId'];
this.route.params.subscribe(params => {
this.myId = params['myId'];
});
}
显然,我需要模拟已激活的快照,但是否有更好的方法?
const fakeRoutes: Routes = [{path: 'info', data: { catalogId: '123' }, component: StatusComponent},]
然后RouterTestingModule.withRoutes(fakeRoutes)
的操作。不确定这种语法是否被支持。 - and85this.route.params
(返回一个可观察对象),而不是快照this.route.snapshot.params
(返回参数对象)。 - LLai