Как добраться до оператора catchError с помощью тестирования - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь скрыть в своем коде catchError блоков, но я пробовал много подходов, и ни один из них не работает. Мой код правильно покрыт, за исключением всех catchError блоков! Есть ли какая-то функция magi c, о которой я бы не знал?

Вот пример кода.

some.effects.ts

 get$ = createEffect(() =>
  this.actions$.pipe(
    ofType(myActions.Get),
    switchMap(({ payload }) => {
      return this.httpService.get(payload).pipe(
        map(res => myActions.Loaded({ payload: res })),
        catchError(() => {
          localStorage.removeItem('someItem');
          return of(myActions.Create()))
        }
      );
    })
  )

);

some.effects.spe c .ts

  it('get$ fails', () => {

    function mockError() {
      return new HttpErrorResponse({
        error: 'error', 
        headers: new HttpHeaders(),
        status: 404
      });
    }

    spyOn(httpService, 'get').and.returnValue(of(mockError));

    actions$ = hot('--a', { a: myActions.Get({}) });
    completion$ = cold('--c', { c: myActions.Create({}) });

    expect(effects.get$).toBeObservable(completion$);
    expect(localStorage.removeItem).toHaveBeenCalled();
  });

EDIT: файл spe c выше является лишь одним из многих фрагменты, которые я пробовал, и я не понимаю, почему это не работает. Любой совет будет безумно признателен. Кроме того, я могу протестировать catchError с помощью effects.get $ .subscribe, но по какой-то причине он пропускает покрытие кода, что является проблемой в данном случае.

Большое спасибо!

1 Ответ

0 голосов
/ 08 мая 2020

используйте throwError вместо of

spyOn(httpService, 'get').and.returnValue(throwError(mockError));
...