Ожидайте наблюдаемого сбоя в тесте в Angular / Karma / Jasmine - PullRequest
0 голосов
/ 25 января 2019

У меня есть компонент, который в конечном итоге вызывает несколько HTTP-сервисов через последовательные switchMap для извлечения данных из бэкэндов.

Я хочу протестировать часть обработки ошибок.Приложение имеет глобальную обработку ошибок (ErrorHandler) и локальную обработку ошибок через catchError.

Метод для проверки выглядит следующим образом:

  public methodUsingObservable() {
    this.someRequest()
      .pipe(catchError((error) => this.handleError(error)))
      .subscribe(console.log);
  }

Обработка проверки ошибок, если ошибка связанак бизнес-действию и снова выбросить его для обработки глобальным обработчиком

handleError(error) {
    checkLocally(error);
    return throwError(error);
  }

Для моего теста я высмеиваю someRequest с throwError, чтобы смоделировать проблему с бэкэнд-вызовом

  it('should handle the error when one occurs', fakeAsync(() => {
    const service: MachinService = TestBed.get(MachinService);
    spyOn(service,'someRequest').and.returnValue(throwError(new Error("Failing HTTP call")));
    spyOn(service,'handleError').and.callThrough();


    service.methodUsingObservable();
    tick();

    expect(service.methodUsingObservable).toThrowError();
    expect(service.handleError).toHaveBeenCalled();
 }));

Однако, как бы я ни шпионил и ожидал чего-то, Карма продолжает считать, что тест провален, потому что подписка, как и ожидалось, выдает необработанную ошибку.

Я пробовал с:

expect(service.methodUsingObservable).toThrowError();
expect(service.methodUsingObservable()).toThrowError();
expect(() => service.methodUsingObservable()).toThrowError();

Но, похоже, никто не научит систему принимать тест как успешный, и тест не пройден.

Chrome 62.0.3202 (Windows 10.0.0) MachinService should handle the error when one occurs FAILED
    Error: Failing HTTP call
        at UserContext.<anonymous> src/app/shared/services/machin.service.spec.ts:12:64)
    ...

Как пометить тест как пройденный в этих условиях?

...