Невозможно поймать HttpResponseError, издевались над Жасмин - PullRequest
0 голосов
/ 17 апреля 2020

Я просто проверяю, что компонент будет показывать предупреждение об ошибке, когда вызов службы возвращает ошибку 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}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...