Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unit testing HttpInterceptor from Angular 4

Tags:

People also ask

What is Httpinterceptor in Angular?

HTTP Interceptors is a special type of angular service that we can implement. It's used to apply custom logic to the central point between the client-side and server-side outgoing/incoming HTTP request and response. Keep in mind that the interceptor wants only HTTP requests.

Can Angular have multiple HTTP interceptors?

So how can I add multiple interceptors? Http doesn't allow to have more than one custom implementation. But as @estus mentioned the Angular team has added a new HttpClient service recently (release 4.3) which supports multiple interceptors concept. You don't need to extend the HttpClient as you do with the old Http .

What is fixture detectChanges ()?

fixture is a wrapper for our component's environment so we can control things like change detection. To trigger change detection we call the function fixture.detectChanges() , now we can update our test spec to: Copy it('login button hidden when the user is authenticated', () => { expect(el. nativeElement. textContent.


Can you tell me how to test the HttpInterceptor provided by the Angular 4. I have created an interceptor as per the examples but not sure how to test it. Below is my interceptor and I want to test if the custom headers are added and when response status is 401 window.location.href is done.

export class MyInterceptor implements HttpInterceptor {      intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {         const headers = new HttpHeaders();         this.addHeader(headers); // This will add headers          const changedReq = req.clone({ headers: headers });         return next.handle(req)             .catch(err => {                 if (err instanceof HttpErrorResponse) {                     switch (err.status) {                         case 302:                         case 401:                             window.location.href = "http//google.com";                             break;                                      default:                             throw new Error(this.getErrorMessage(err));                     }                 }                  return Observable.throw(err);             });     }