Angular : handleError unit test case

25 Views Asked by At

I need help for code coverage for handle error in my passenger-detail.service.specs.ts

below is my code from passenger detail service

import { Injectable } from "@angular/core";
 import { Observable, catchError, throwError } from "rxjs";
 import {
  HttpClient,
  HttpErrorResponse,
  HttpHeaders,
} from "@angular/common/http";
import { AuthCookiesService } from "@britishairways-ent/cookie";
import { environment } from "src/environments/environment";
import { PassengerApis } from "src/app/interfaces/apis-passenger.interface";

@Injectable({
  providedIn: "root",
})
export class PassengerDetailsService {
  constructor(
    private http: HttpClient,
    private authCookiesService: AuthCookiesService
  ) {}

  addApisData(passengerDetails: PassengerApis): Observable<any> {
    const url = environment.SAVE_APIS;
    return this.http
      .post(url, passengerDetails, {
        observe: "response",
        headers: new HttpHeaders({
          "Content-Type": "application/json",
          Authorization:
            "Bearer " + this.authCookiesService.getPublicAccessToken(),
        }),
      })
      .pipe(catchError(this.handleError));
  }

  handleError(error: HttpErrorResponse) {
    if (
      error.error &&
      typeof error.error.code !== "undefined" &&
      typeof error.error.description !== "undefined"
    ) {
      return throwError(() => error.error.code);
    }
  }
}

enter image description here

I am getting an alert saying function not covered and statement not covered.

1

There are 1 best solutions below

0
Slang123 On

you could test for various error response codes like, 401, 403, 404, 500. And then in your handleError you could act differently on each scenario, if you like.

setup your spec with httpTestingController and import HttpClientTestingModule

import { HttpClientTestingModule, HttpTestingController } from 
"@angular/common/http/testing";

describe('PassengerDetailsService', () => {
    let service: PassengerDetailsService;
    let httpMock: HttpTestingController;

    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [HttpClientTestingModule],
        });

        service = TestBed.inject(PassengerDetailsService);
        httpMock = TestBed.inject(HttpTestingController);
    });

    afterEach(() => {
        httpMock.verify();
    })

    it('should handle error 404', () => {
        const error = { code: 404, description: 'Not Found' }

        service.addApisData({ name: "John Doe", age: 25 }).subscribe({
            error: (err) => {
                expect(err).toBe(404);
            }
        });

        const req = httpMock.expectOne(environment.SAVE_APIS);
        req.flush(error, { status: 404, statusText: 'Not Found' });
    });

});