Angular 角度单元测试,用于可观测误差

Angular 角度单元测试,用于可观测误差,angular,jasmine,karma-jasmine,angular-unit-test,Angular,Jasmine,Karma Jasmine,Angular Unit Test,我正试图消除服务调用的代码覆盖率中的错误。 我遵循两种方法,但犯了一些错误 下面是我编写测试用例的方法 setPrefixSuffixDetails(): void { this.prefixSuffixDetailSubscription = this.profileBeneficiaryService.getPrefixSuffixDetails() .subscribe(data => { if (data.body.prefixlist.leng

我正试图消除服务调用的代码覆盖率中的错误。 我遵循两种方法,但犯了一些错误

下面是我编写测试用例的方法

setPrefixSuffixDetails(): void {
    this.prefixSuffixDetailSubscription = this.profileBeneficiaryService.getPrefixSuffixDetails()
      .subscribe(data => {
        if (data.body.prefixlist.length > 0) {
          this.prefixConfig.options = data.body.prefixlist;
        }
        if (data.body.suffixlist.length > 0) {
          this.suffixConfig.options = data.body.suffixlist;
        }
      }, error => {
        this.loadingData = false;
        this.notificationService.addNotications(error);
      });
  }
对于测试,我正在创建提供者,下面是我的提供者

 { provide: ProfileBeneficiaryService, useClass: ProfileServiceStub},
{provide: ProfileBeneficiaryService, useClass: ProfileBenficiaryErrorStub},
一个用于成功调用,另一个用于错误调用

beforeEach(async(() => {

        TestBed.configureTestingModule({ .............

    class ProfileBenficiaryErrorStub {
            getPrefixSuffixDetails = function () {
                return Observable.throw(Error('Test error'));
            }}

     class ProfileServiceStub {
      getPrefixSuffixDetails = function () {
                return Observable.of(this.data);
            }
            }
但问题是,当我使用两个提供者时,它只涵盖错误,如果我不包括错误提供者,它就涵盖成功

请让我知道我在使用提供者时犯了什么错误

另外,我试图用间谍的方式和面对的错误

 it('should check for the getPrefixSuffixDetails error call ', () => {
 spyOn(ProfileBeneficiaryService,'getPrefixSuffixDetails').and.returnValue(Observable.throw('error'));});

下面的解决方案对我有效

it('should check for the getPrefixSuffixList error call ', () => {
    spyOn(profileDependentsService, 'getPrefixSuffixList').and.returnValue(Observable.throw('error'));
    component.getPrefixSuffixList();
    expect(profileDependentsService.getPrefixSuffixList).toHaveBeenCalled();
});

下面的解决方案对我有效

it('should check for the getPrefixSuffixList error call ', () => {
    spyOn(profileDependentsService, 'getPrefixSuffixList').and.returnValue(Observable.throw('error'));
    component.getPrefixSuffixList();
    expect(profileDependentsService.getPrefixSuffixList).toHaveBeenCalled();
});

您不需要使用两个提供者,一个就足够了
spyOn(profilebenginiaryservice,'getPrefixSuffixDetails')和.returnValue(Observable.throw('error');})
应足以调用
profileBeneficiaryService.getPrefixSuffixDetails()
失败。如果您发布为
setPrefixSuffixDetails
编写的测试,我可以为您提供更多帮助。您不需要使用两个提供程序,一个就足够了
spyOn(profilebenginiaryservice,'getPrefixSuffixDetails')和.returnValue(Observable.throw('error');})
应足以调用
profileBeneficiaryService.getPrefixSuffixDetails()
失败。如果您发布为
setPrefixSuffixDetails
编写的测试,我可以为您提供更多帮助。