I have the below http interceptor in my angular application and I would like to unit test the same using Jasmine. I googled some of them and tried but its not working as expected. Please find the below HttpInterceptorService.ts file code
export class HttpInterceptorService Implements HttpInterceptor {
counter = 0;
constructor(private loaderService: LoaderService) { }
intercept(req: HttpRequest<any>, next: HttpHandler) {
if (req.url !== '/getUsers') {
this.counter ++;
}
this.loaderService.setStatus(true);
return next.handle(req).pipe(
finalize(() => {
if (req.url !== 'getUsers') {
this.counter --;
}
if (this.counter === 0) {
this.loaderService.setStatus(false);
}
};
);
}
}
Below are the HttpInterceptor.service.spec.ts file code which I tried as of now. Im not sure how to test the particular method in it.
describe('HttpInterceptorService', () => {
let httpService: HttpService;
let httpMock: HttpTestingController;
let interceptor: HttpInterceptorService;
beforeEach(()=> {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [
HttpService,
{provide:HTTP_INTERCEPTOR, useClass: HttpInterceptorService, multi: true},
]
});
httpService = TestBed.get(HttpService);
httpMock = TestBed.get(HttpTestingController);
interceptor = TestBed.get(HttpInterceptorService);
});
it('should increment the counter for all api's expect getUsers', ()=> {
httpService.get('getAdminList').subscribe(res => {
expect(res).toBeTruthy();
expect(interceptor.counter).toBeGreaterThan(0);
});
});
});
after checking the reference code I'm able to cover few lines of code with above changes. But I'm still not able to cover the finalize method. Request to kindly help.
httpMock
and inspect actual request/response. angular.io/guide/http#testing-http-requests – Chore