Angular 如何覆盖角度传感器中的HttpErrorResponse
我试图通过Jasmin框架将覆盖率降低到HttpErrorResponse代码覆盖率以下,但这并没有覆盖 组成部分 测试班Angular 如何覆盖角度传感器中的HttpErrorResponse,angular,karma-jasmine,Angular,Karma Jasmine,我试图通过Jasmin框架将覆盖率降低到HttpErrorResponse代码覆盖率以下,但这并没有覆盖 组成部分 测试班 这是因为在测试中,您调用的是服务,而组件代码中没有包含代码 您需要调用component.onSubmit,而不是service.login.subscribe。对于成功和错误案例,您需要单独的测试,每个案例需要两个测试来覆盖if和else路径。它们基本上不同于模拟loginService.login方法的方式,当然也不同于预期的结果 对于成功的案例,您可以按如下方式模拟l
这是因为在测试中,您调用的是服务,而组件代码中没有包含代码
您需要调用component.onSubmit,而不是service.login.subscribe。对于成功和错误案例,您需要单独的测试,每个案例需要两个测试来覆盖if和else路径。它们基本上不同于模拟loginService.login方法的方式,当然也不同于预期的结果 对于成功的案例,您可以按如下方式模拟loginService.login,并对if和else路径使用不同的successResponse: 对于错误情况,需要模拟loginService.login,如下所示: 如果路径
让我试着告诉结果,否则块被覆盖,但不覆盖,如果块在里面HttpErrorResponse@AbhiRam:这是因为errorResponse.error不是ErrorEvent的实例,而是字符串。要实现完全覆盖,您需要再次对ifcase.spyOnservice、'login'.and.returnValuethrowErrornew ErrorEvent'network Error'进行测试;我使用了上面的代码,但还没有涵盖,你能用代码指导吗
onSubmit(form: NgForm) {
if (navigator.onLine) {
const headers = new HttpHeaders().set(InterceptorSkipHeader, '')
this.loginService.login(form.value, headers).subscribe(data => {
const serverData = JSON.parse(JSON.stringify(data));
if (serverData.status == 'success') {
localStorage.setItem(GlobalVariables.AUTHERIZATION_TOEKN, serverData.access_token);
localStorage.setItem(GlobalVariables.USER_ID, serverData.userId);
this.router.navigate([""]);
} else {
this.toast.error(serverData.message, "Fail!");
}
}, (errorResponse: HttpErrorResponse) => {
if (errorResponse.error instanceof ErrorEvent) {
this.toast.error(errorResponse.error.message, "Client Error");
} else {
this.toast.error(errorResponse.error.message, "Server Error");
}
});
} else {
this.toast.error(GlobalVariables.CHECK_INTERNET_CONNECTION, "Fail!");
}
}
it('Check login component', () => {
const errorResponse = new HttpErrorResponse({
error: '404 error',
status: 404,
statusText: 'Not Found'
});
let testForm = <NgForm>{
value: {
userName: "sample",
password: "sample"
}
};
const headers = new HttpHeaders();
let response;
spyOn(service,'login').and.returnValue(of(errorResponse));
service.login(testForm.value,headers).subscribe(
data => fail('Should have failed with 404 error'),
(error: HttpErrorResponse) => {
expect(error.status).toEqual(404);
expect(error.error).toContain('404 error');
}
);
component.onSubmit(testForm);
});
(errorResponse: HttpErrorResponse) => {
if (errorResponse.error instanceof ErrorEvent) {
this.toast.error(errorResponse.error.message, "Client Error");
} else {
this.toast.error(errorResponse.error.message, "Server Error");
}
});
} else {
this.toast.error(GlobalVariables.CHECK_INTERNET_CONNECTION, "Fail!");
}
spyOn(service,'login').and.returnValue(of(successResponse));
const errorEvent = <ErrorEvent> { message: 'something bad happened' };
const errorResponse = new HttpErrorResponse({
error: errorEvent
});
spyOn(service,'login').and.returnValue(throwError(errorResponse));
const errorResponse = new HttpErrorResponse({
error: '404 error',
status: 404,
statusText: 'Not Found'
});
spyOn(service,'login').and.returnValue(throwError(errorResponse));