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: {}});
我正在为订阅调用编写单元测试,但我无法涵盖订阅方法的错误处理部分。在 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: {}});