Угловая модульная проверка SpyOn дает мне ошибки - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь выполнить модульное тестирование для сервисов, я издевался над данными и ожидаю некоторого результата, но получаю ошибку. Ниже приведен мой файл ts файла компонента

setPrefixSuffixDetails(): void {
    this.profileService.getPrefixSuffixDetails()
      .subscribe(
        data => {
          if(data.body.prefixlist.length > 0) {
            this.prefixConfig.options = data.body.prefixlist;
          }
        }
      );
  }

Ниже мой файл Spec.ts

providers: [{provide: ProfileService, useClass: ProfileStub}]

beforeEach(() => {
        fixture = TestBed.createComponent(ProfileBeneficiariesViewComponent);
        component = fixture.componentInstance;
        component.ngOnInit();
        profileService = fixture.debugElement.injector.get(ProfileService);
    });

    let data = {body:['prefixList']}
    it('should have a method to get details', () => {
    profileService = fixture.debugElement.injector.get(ProfileService);

    spyOn(profileService, 'getPrefixSuffixDetails').and.callThrough();
             component.ngOnInit();
     expect(data.body).toContain([ 'prefixlist' ]);

 });

Ошибка, которую я получаю, ниже

Error: <spyOn> : could not find an object to spy upon for setPrefixSuffixDetails()
Usage: spyOn(<object>, <methodName>)


class ProfileStub {
        getPrefixSuffixDetails = function () {
            return Observable.of(data);
        }

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Введите вашу зависимость, используя inject из @angular/core/testing

Ваш файл спецификации должен быть примерно таким

describe('ProfileBeneficiariesViewComponent', () => {
    let component: ProfileBeneficiariesViewComponent;
    let fixture: ComponentFixture< ProfileBeneficiariesViewComponent >;
    let profileService;

    beforeEach(async(() => {
        TestBed.configureTestingModule({
            providers: [
                {provide: ProfileService, useClass: ProfileStub}
            ]
        })
        .compileComponents();
    }));

    beforeEach(() => {
        fixture = TestBed.createComponent(ProfileBeneficiariesViewComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
    });

    beforeEach(inject([ProfileService], s => {
        profileService = s;
    }));

    it('Do Your test', () => {
        expect(component).toBeTruthy();
    });
});
0 голосов
/ 06 июня 2018

Не используйте ключевое слово this в spyOn().Вы можете напрямую получить доступ к profileService.

it('should have a method to get details', () => {

   let response: {"body":{"prefixlist":["DEACON","DR","MISS","MR","MRS","MS","PASTOR","REV"],"suffixlist":["I","II","III","IV","Jr","Sr"]}};
   spyOn(profileService, 'setPrefixSuffixDetails').and.callThrough().and.
            returnValue(Observable.of(response));
   fixture.detectChanges();
   expect(response.body).toContain('prefixList');

});

Это должно устранить вашу ошибку Object not found.

...