При возникновении ошибки модульный тест Angular / Karma / Jasmine завершается неудачно - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть модульный тест Карма / Жасмин для метода перехвата угловой перехватчика, который возвращает rxjs Observable.Если есть какая-то ошибка в успешном тестировании модуля обратного вызова, он будет отображаться как пройденный, даже если он не пройден.Код:

тестируемый метод:

intercept(
  request: HttpRequest<any>,
  next: HttpHandler
): Observable<HttpEvent<any>> {
  ...

  return next.handle(req);
}

test:

it("some test desc", () => {
  const headers = ...
  const request = new HttpRequest('GET', '/test', '', { headers });

  const next = jasmine.createSpyObj('HttpHandler', ['handle']);
  const errorResponse = new HttpErrorResponse({
    status: 401,
    error: 'SOME_ERROR_CODE'
  });

  next.handle.and.returnValue(throwError(errorResponse));

  console.log('before');
  interceptor.intercept(request, next).subscribe(
    () => fail('Observable should resolve with error.'),
    (res: HttpErrorResponse) => {
      console.log('in');
      throw new Error('some error happened here');
      expect(res).toBe(errorResponse);
    }
  );

  console.log('after');
});

Я могу это исправить, вызвав done в конце моего сообщения об ошибке, как описано здесь , но я не понимаю, почему это необходимо, поскольку мой код выполняется синхронно (из-за throwError rxjs, использующего queueScheduler), что может быть подтверждено порядком, в котором выполняются журналы (до, во, после).

1 Ответ

0 голосов
/ 27 февраля 2019

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

...