Jest перехватчик angular с toHaveBeenCalledTimes - PullRequest
0 голосов
/ 04 мая 2020

У меня есть проблема в моих тестах, которые всегда в порядке, даже когда они должны быть выбиты. Я создал перехватчик

@Injectable()
export class ErrorHttpInterceptor implements HttpInterceptor {
  constructor(private store: Store<RoutingCustom>) {}

  intercept(
    request: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(
      tap(
        () => {},
        (err: object) => {
          if (err instanceof HttpErrorResponse && err.status === 501) {
            this.store.dispatch(
              RoutingCustom.login()
            );
          }
        }
      )
    );
  }
}

Я сделал тесты для проверки моего перехватчика

describe('ErrorHttpInterceptor', () => {
  let httpMock: HttpTestingController;
  let httpClient: HttpClient;
  let store: MockStore<RoutingInterface.RouterState>;

  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [],
      imports: [HttpClientTestingModule],
      providers: [
        {
          provide: HTTP_INTERCEPTORS,
          useClass: ErrorHttpInterceptor,
          multi: true
        },
        provideMockStore()
      ]
    });
    store = TestBed.get(Store);
    httpClient = TestBed.get(HttpClient);
    httpMock = TestBed.get(HttpTestingController);
  });

  test('error 501', () => {
    spyOn(store, 'dispatch').and.stub();
    httpClient.get('/test').subscribe(
      data => {},
      error => {
        expect(store.dispatch).toHaveBeenCalledTimes(4);
      }
    );

    const req = httpMock.expectOne(`/test`);
    req.flush('Error', { status: 501, statusText: 'Error' });
  });
});

Однако метод toHaveBeenCalledTimes, который я могу поставить 0 или 15, у меня все еще есть тест, который проходит в OK. У кого-нибудь есть идея для тестирования перехватчика?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...