Я борюсь с той же проблемой. В моем случае я пытался проверить перехватчик в Angular.
Мое решение состояло в том, чтобы передать реальную наблюдаемую как насмешку.
Это мой фактический код:
@Injectable()
export class SetLoadingService implements HttpInterceptor {
constructor(@Inject('INotificationLoading') private _INotificationLoading: INotificationLoading) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (req.headers.has('HideLoading')) {
return next.handle(req);
} else {
this._INotificationLoading.openLoading();
return next.handle(req).pipe(finalize(() => {
this._INotificationLoading.closeLoading();
}));
}
}
}
А это мой тест:
it('should be show loading', () => {
const next: any = {
handle: () => {
return Observable.create(subscriber => {
subscriber.complete();
});
}
};
const requestMock = new HttpRequest('GET', '/test');
const closeLoadingSpy = spyOn<INotificationLoading>(notification, 'closeLoading');
service.intercept(requestMock, next).subscribe(() => {
expect(closeLoadingSpy).toHaveBeenCalled();
});
expect(openLoadingSpy).toHaveBeenCalled();
});
В двух словах, я решаю проблему, передавая Observable.create () в качестве возврата дескриптора метода. В вашем случае вы можете установить возвращение http mock a Observable и установить ожидание, необходимое для проверки теста.