это первый проект, в котором я пытаюсь заставить модульный тест работать для угловых, поэтому я просто выясняю, как это работает. проект находится под углом 7, и у меня есть HttpInteceptorService, чтобы повторить 2 дополнительные попытки в случае сбоя HTTP-запроса:
@Injectable()
export class HttpInterceptorService implements HttpInterceptor {
constructor() { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
return next.handle(request).pipe(retry(2));
}
}
мои тесты для этого перехватчика пока:
describe('HttpInterceptorService', () => {
beforeEach(() => TestBed.configureTestingModule({
imports: [
HttpClientTestingModule
],
providers: [
HttpInterceptorService,
{
provide: HTTP_INTERCEPTORS,
useClass: HttpInterceptorService,
multi: true
}
]
}));
it('should be created', () => {
const service: HttpInterceptorService = TestBed.get(HttpInterceptorService);
expect(service).toBeTruthy();
});
it('should get http 404', () => {
const http: HttpClient = TestBed.get(HttpClient);
http.get('/fake-route').subscribe((response: any) => {
expect(response).toBeTruthy();
expect(response.status).toEqual('404');
});
});
});
так что я проверяю, получаю ли я 404 успешно, но я не знаю, как проверить, повторяет ли перехватчик еще 2 раза.
Редактировать
На самом деле я был не прав, даже мой 'should get http 404'
тест не работает правильно, он всегда дает ложный положительный результат.
Редактировать 2
Полагаю, я все ближе, 404 теперь работает нормально, и я добавил тест для «повторной попытки», но он все еще не работает должным образом. Я думаю, что перехватчик, вероятно, даже не вызывается ...
it('should repeat failed request 2 more times', () => {
const emsg = 'deliberate 404 error';
jasmine.clock().install();
spyOn(httpClient, 'get').and.callThrough();
expect(httpClient.get).not.toHaveBeenCalled();
httpClient.get(fakeUrl).subscribe(
(response) => {
fail('should have failed with the 404 error');
},
(error) => {
expect(error.status).toEqual(404, 'status');
expect(error.error).toEqual(emsg, 'message');
});
jasmine.clock().tick(3000);
expect(httpClient.get).toHaveBeenCalledTimes(3);
jasmine.clock().uninstall();
});
и этот тест не пройден: «Ожидаемый шпион получил 3 раза. Он был вызван 1 раз»