У меня есть проблема в моих тестах, которые всегда в порядке, даже когда они должны быть выбиты. Я создал перехватчик
@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. У кого-нибудь есть идея для тестирования перехватчика?
Спасибо