Допустим, у меня есть компонент, который подписывается на сервисную функцию:
export class Component {
...
ngOnInit() {
this.service.doStuff().subscribe(
(data: IData) => {
doThings(data);
},
(error: Error) => console.error(error)
);
};
};
Вызов подписки принимает две анонимные функции в качестве параметров, мне удалось настроить тест работающего модуля для функции данных, но Карма не примет покрытие для ошибки.
Я пытался шпионить за функцией console.error, выдавал ошибку, а затем ожидал, что шпион был вызван, но это не совсем так.
Мой юнит-тест:
spyOn(console,'error').and.callThrough();
serviceStub = {
doStuff: jasmine.createSpy('doStuff').and.returnValue(Observable.of(data)),
};
serviceStub.doStuff.and.returnValue(Observable.throw(
'error!'
));
serviceStub.doStuff().subscribe(
(res) => {
*working test, can access res*
},
(error) => {
console.error(error);
console.log(error); //Prints 'error!' so throw works.
expect(console.error).toHaveBeenCalledWith('error!'); //Is true but won't be accepted for coverage.
}
);
Какова наилучшая практика для тестирования анонимных функций, подобных этим? Какой минимум для обеспечения тестового покрытия?