I have below interceptor auth-interceptor.service.ts
import {Injectable, Injector} from '@angular/core'; import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http'; import {Observable} from 'rxjs/Observable'; import {Cookie} from './cookie.service'; import {Router} from '@angular/router'; import {UserService} from './user.service'; import {ToasterService} from '../toaster/toaster.service'; import 'rxjs/add/operator/catch'; import 'rxjs/add/observable/throw'; @Injectable() export class AuthInterceptor implements HttpInterceptor { constructor(private injector: Injector) {} private handleError(err: HttpErrorResponse): Observable<any> { let errorMsg; if (err.error instanceof Error) {
Now I'm trying to make fun of http.get to throw an error, so that the handleError method handleError an error message.
Below is my approach to the test case auth-interceptor.service.specs.ts
import {async, inject, TestBed} from '@angular/core/testing'; import {AuthInterceptor} from './auth-interceptor.service'; import {ApiService} from './api.service'; import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; import {environment} from '../../../environments/environment'; describe(`AuthInterceptor`, () => { const somePath = `/somePath`; beforeEach(() => { TestBed.configureTestingModule({ imports: [HttpClientTestingModule], providers: [AuthInterceptor, ApiService] }); }); it(`should be created`, inject([AuthInterceptor], (service: AuthInterceptor) => { expect(service).toBeTruthy(); })); it(`should log an error to the console on error on get()`, async(inject([ApiService, HttpTestingController], (apiService: ApiService, httpMock: HttpTestingController) => { spyOn(console, 'error'); apiService.get(somePath).subscribe((res) => { console.log(`in success:`, res); }, (error) => { console.log(`in error:`, error); }); const req = httpMock.expectOne(`${environment.apiUri}${somePath}`); req.flush({ type: 'ERROR', status: 404, body: JSON.stringify({color: `blue`}) }); expect(console.error).toHaveBeenCalled(); })) ); });
While clearing the answer, I am not sure how to reset the error response, so the handleError method will be called on my interceptor and eventually will call console.error . The documentation has no example for my situation. Any help or suggestion appreciated.