Для моих модульных тестов я проверяю, чтобы мои компоненты вызывали правильные методы, а затем вели себя правильно, если они это делают. Единственная проблема, с которой я столкнулся в этих тестах, это ошибки. Я пытаюсь вызвать сбой службы, чтобы в окне предупреждения отображалось сообщение об исключении. Я ищу понимание того, как заставить мой сервис отказывать, не вызывая фактического теста. Допустим, у меня есть функция, которая похожа на это:
exceptionMessage: string = 'error, please contact administrator'
getInfo() {
this.myService.getData('url')
.catch((error: Response | any) => {
this.displayAlert(this.exceptionMessage);
console.error(error.message || error);
return Observable.throw(error.message || error);
});
};
Тест:
fit('should call displayAlert', () => {
let window = spyOn(userComponent, 'displayAlert');
spyOn(myService, 'getData').and.returnValue(Observable.of('url')//need to fail here
userComponent.ngOnInit();
userComponent.getInfo();
expect(window).toHaveBeenCalled();
});
При запуске теста мой код ожидает вызова окна шпиона. Но так как мой сервис не выходит из строя, я не могу получить доступ к функции displayAlert в коде. Теперь я смог успешно проверить, правильно ли мои службы обрабатывают ошибки, но они обнаруживают наблюдаемое и не отображают окно предупреждения, как это делает мой компонентный метод. Я пытался выполнить тест, как мои услуги, но безуспешно. Моя цель - пройти модульное тестирование, которое приведет к сбою моего сервиса. Оттуда мне нужно проверить, что когда мой компонент обнаруживает ошибку, отображается сообщение об ошибке. Мне нужно, чтобы служба не работала, чтобы я мог получить код this.displayAlert
Спасибо! Если кто-нибудь может направить меня к надлежащей документации или дать представление, это было бы здорово. Я не смог найти много по этому поводу.
Редактировать: Обновленный тест:
fit('should have getUsers() call showAlertWindow', () => {
let window = spyOn(userComponent, 'showAlertWindow');
spyOn(userComponent, 'loadUser').and.throwError('Error');
expect(() => {
userComponent.loadUser()}).toThrowError('Error');
userComponent.loadUser();
expect(window).toHaveBeenCalled();
});