首页 > 解决方案 > 在 Angular HTTP 拦截器中对拦截函数进行单元测试

问题描述

我编写了一个 Angular 9 HTTP 拦截器,我想在相对隔离的情况下对拦截功能进行单元测试。从我已经在StackOverflow上看到的情况来看,人们建议发出虚假 HTTP 请求或返回基本请求,因为我使用 .pipe 方法(TypeError: next.handle(...).管道不是函数

这是我的拦截功能,请问您建议对该功能进行单元测试吗?

intercept(request: HttpRequest < unknown >, next: HttpHandler): Observable < HttpEvent < unknown >> {
  this.loadingService.show();
  return next.handle(request).pipe(
    catchError((error: HttpErrorResponse) => {
      if (error.status !== 401) {
        this.snackBar.open("There was an error when making your request! " + error.message, 'Okay, I will refresh the page', { duration: 10000 });
      }
      return throwError(error);
    }),
    finalize(
      () => {
        this.loadingService.hide()
      }
    )
  );
}

标签: angularangular-httpclientangular-httpclient-interceptors

解决方案


我能够通过在提供者部分添加以下内容来解决我的问题

TestBed.configureTestingModule

通过提供HTTP_INTERCEPTORSHttpClientTestingModule使用我制作的拦截器:

{
  provide: HTTP_INTERCEPTORS,
  useClass: LoadingInterceptor,
  multi: true
},

推荐阅读