我有针对http错误的全局错误处理程序:
export class GlobalErrorHandlerComponent implements ErrorHandler, HttpInterceptor {
constructor(private injector: Injector, private deviceService: DeviceDetectorService) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).do((event: HttpEvent<any>) => {
}, (error: any) => {
const router = this.injector.get(Router);
const service = this.injector.get(ErrorLogService);
service.logErrors(error, router, this.deviceService);
});
}
}
我想测试是否在http错误发生时调用了我的服务函数:
describe('GlobalErrorHandlerComponent', () => {
let service: ErrorLogService;
let globalHandler: GlobalErrorHandlerComponent;
let httpMock: HttpTestingController;
let httpClient: HttpClient;
let requestMock: HttpRequest<any>;
let httpHandlerMock: HttpHandler;
let errorMock: Error;
beforeEach(() => TestBed.configureTestingModule({
imports: [HttpClientTestingModule,DeviceDetectorService,Injector,HttpRequest,HttpHandler,Error],
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: GlobalErrorHandlerComponent,
multi: true
}]
}));
service = TestBed.get(ErrorLogService);
httpMock = TestBed.get(HttpTestingController);
requestMock = TestBed.get(HttpRequest);
httpHandlerMock = TestBed.get(HttpHandler)
it('should called service', () => {
spyOn(service,'logErrors');
httpMock.expectOne('/error').flush(new Error());
globalHandler.intercept(requestMock,httpHandlerMock).subscribe(
()=> {},(error: HttpErrorResponse) => {
httpMock.expectOne('/error').flush(new Error());
expect(service.logErrors).toHaveBeenCalled()
}
)
expect(service.logErrors).toHaveBeenCalled();
});
});
我尝试做的操作与我在教程/其他堆栈问题中看到的相同,但是我得到了Empty test suite.
如何以正确的方式测试此方法?