В моем приложении Angular у меня есть компонент, который подписывается на наблюдаемое и в методе подписки присваивает возвращаемое значение свойству. В случае сбоя запроса я хочу сбросить значение в компоненте и передать ошибку глобальному обработчику ошибок (который мы реализовали сами и позаботимся об уведомлении пользователя).
someFunction(): void {
const myObservable = this.service.someFunction(); //simplified; in the actual code there are some ifs and elses that determine which function is actually called
myObservable.subscribe(
(response) => {
this.result= response;
},
(error => {
this.result = null;
throw error;
}
));
}
Этот фрагмент кода прекрасно работает в реальном приложении. Единственная проблема в том, что я не понимаю, как правильно это проверить. Я написал шпиона, который выбрасывает ошибку, чтобы функция обработки ошибок могла ее сбросить. Это выглядит следующим образом:
spyOn(serviceMock, 'someFunction').and.returnValue(throwError('Error!!'));
Поскольку ошибка вызывается не непосредственно в функции, а в асинхронно выполняемой функции обработки ошибок, она не будет работать, если я использую
expect(component.myFunction()).toThrowError() //test fails because apparently no error is thrown, although I get an 'unhandled exception: Error!!' in the console
Я также не могу использовать попытку catch в тесте, потому что тогда ошибка будет выдана, но не перехвачена. Тем не менее, тест не пройден, потому что произошла ошибка.
Я хотел бы проверить, что ошибка переброшена или, по крайней мере, мой тест не провалился, потому что эта ошибка выдается.
Может пожалуйста, скажите мне, возможно ли это в Jasmine или если идея бросать ошибки и использовать глобальный обработчик ошибок не очень хорошая идея?
Любая помощь будет принята:)