Angular 如何在订阅方法中对错误函数进行单元测试

Angular How to unit test error function in subscribe method

我正在为订阅调用编写单元测试,但我无法涵盖订阅方法的错误处理部分。在 403 错误的情况下,有一个 handleError 函数可以处理 statusCode=403 和其他 statusCodes 的错误。任何帮助将不胜感激!

component.ts 文件

  getData(){
    this.someService.getResponse().subscribe(res=>{

    this.showForm=true;
    this.Form.patchValue({
      flag:res && res.someflag? "true" : "false"
    })
  },((error: HttpErrorResponse) => {       
      this.handleError(error);
    })); 
  }

component.ts 文件中的 handleError() 函数

  handleError(error){
    this.showForm=false;
    if(error.error && error.error.statusCode === 403){
       this.itemError=false;
       this.overlayError=true;
    }
    else{
      this.itemError=true;
      this.overlayError=false;
    }
  }

component.spec.ts 文件

这是我尝试过的,但它没有涵盖测试用例。

it('should handle error for 403',async()=>{
  const param={statusCode:403};
  const errorResponse=new Error('403 errror');
  spyOn(component["someService"],"getResponse").and.returnValue(throwError(errorResponse));

  component.handleStatusCodeError(param);
  expect(component.showForm).toBe(false);   
  expect(component.itemError).toBe(false);  
  expect(component.overlayError).toBe(true);  
})

而不是

const errorResponse = new Error('403 error');

你应该模拟如下响应

const errorResponse = new HttpErrorResponse({ status: 403, error: {}});