В моем компоненте Angular 4 у меня есть что-то вроде:
constructor(private route: ActivatedRoute) {
}
ngOnInit() {
this.myId = this.route.snapshot.params['myId'];
}
И я пытаюсь создать макет, который должен выглядеть следующим образом:
class MockActivatedRoute extends ActivatedRoute {
public params = Observable.of({ myId: 123 });
}
Мой тест не работает с:
TypeError: Не удается прочитать параметры свойства 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)
. Не уверен, что этот синтаксис поддерживается. - person and85   schedule 19.10.2017this.route.params
(возвращает наблюдаемое) вместо снимкаthis.route.snapshot.params
(возвращает объект параметров) - person LLai   schedule 19.10.2017