Я просто проверяю, что компонент будет показывать предупреждение об ошибке, когда вызов службы возвращает ошибку 404.
Метод компонента:
getChannels() {
this.channelService.getActiveChannels()
.subscribe(
(result) => {
// whatever.
},
(error) => {
this.alertService.showError('Error', 'No Connection');
console.log(error);
}
);
Метод обслуживания
getActiveChannels() {
return this.http.get<any>(api.apiDomain + 'channels')
.pipe(map((response) => response));
Добавляет тест spe c:
it('error alert called when get channels thrown an error', () => {
const as = fixture.debugElement.injector.get(AlertService);
const error = new HttpErrorResponse({error: 'foo', status: 0});
const cs = fixture.debugElement.injector.get(ChannelService);
jasmine.getEnv().allowRespy(true);
cs.getActiveChannels = jasmine.createSpy('getActiveChannels').and.returnValue(of(error));
component.getChannels();
expect(as.showError).toHaveBeenCalledWith('Error', 'No Connection');
});
Этот подход, переопределяя существующего шпиона, работает как талисман при возврате любого значение массива Но когда я возвращаю эту ошибку, если я отлаживаю, я вижу, что подписчик обрабатывает эту ошибку как правильный результат, а не как ошибку, поэтому он никогда не вызывает предупреждение.
Я хотел бы сохранить свой тест как простой, насколько это возможно, без использования HttpClientTestingModule, который, как мне кажется, является излишним для этой простой задачи.
РЕШЕНИЕ:
cs.getActiveChannels = jasmine.createSpy('getActiveChannels').and.returnValue(throwError({status: 404}));