'Angular Test Random Crash when I try to test interceptor

I'm testing an Angular interceptor who test the refresh token before every api call

When the api response with an error the client must logout

Most of the time it works but some times i've got

Chrome 80.0.3987 (Windows 10.0.0) ERROR An error was thrown in afterAll HttpErrorResponse: Http failure response for https://localhost:44310/api/autoauth/refreshtoken: 401 Unauthorized

and after

Chrome 80.0.3987 (Windows 10.0.0) ERROR Disconnected, because no message in 30000 ms.

Here

class SubjectAuthService extends AuthenticationService {
  logout() { }
}

describe(`JwtRefreshInterceptor`, () => {
  let service: FamilyService;
  let httpMock: HttpTestingController;
  let authenticationService: AuthenticationService;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [
        HttpClientTestingModule,
        RouterTestingModule,
        GtagTestingModule,
      ],
      providers: [
        FamilyService,
        { provide: AuthenticationService, useClass: SubjectAuthService },
        { provide: 'familyTableName', useValue: 'families' },
        {
          provide: HTTP_INTERCEPTORS,
          useClass: JwtRefreshInterceptor,
          multi: true,
        },
      ],
    });


    authenticationService = TestBed.get(AuthenticationService);
    service = TestBed.get(FamilyService);
    httpMock = TestBed.get(HttpTestingController);

  });


  it('should logOut because no current user', () => {
    spyOn(authenticationService, 'logout');

    service.fetchFamilies().subscribe();
    httpMock.expectNone(`${environment.api}/family?catalogId=0`);

    const refreshRequest = httpMock.expectOne(`${environment.api}/autoauth/refreshtoken`);
    expect(refreshRequest.request.method).toBe('POST');

    refreshRequest.flush(null, {
      status: 401,
      statusText: 'Unauthorized',
    });

    expect(authenticationService.logout).toHaveBeenCalled();
  });


Solution 1:[1]

you need to catch the error in the subscribe

.subscribe(() => {}, error =>  {})

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 user2557008