Angular 如何覆盖角度传感器中的HttpErrorResponse

Angular 如何覆盖角度传感器中的HttpErrorResponse,angular,karma-jasmine,Angular,Karma Jasmine,我试图通过Jasmin框架将覆盖率降低到HttpErrorResponse代码覆盖率以下,但这并没有覆盖 组成部分 测试班 这是因为在测试中,您调用的是服务,而组件代码中没有包含代码 您需要调用component.onSubmit,而不是service.login.subscribe。对于成功和错误案例,您需要单独的测试,每个案例需要两个测试来覆盖if和else路径。它们基本上不同于模拟loginService.login方法的方式,当然也不同于预期的结果 对于成功的案例,您可以按如下方式模拟l

我试图通过Jasmin框架将覆盖率降低到HttpErrorResponse代码覆盖率以下,但这并没有覆盖

组成部分 测试班
这是因为在测试中,您调用的是服务,而组件代码中没有包含代码


您需要调用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));