Angular модульный тест SpyOn дает мне ошибки

Sáähil Kumar спросил: 12 мая 2018 в 05:05 в: typescript

Я пытаюсь выполнить модульное тестирование для сервисов, я издевался над данными и ожидал некоторого результата, но получаю errorBelow - это мой компонент ts filets file

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

Ниже mySpec.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);
        }

1 ответ

Amit Chigadani ответил: 13 мая 2018 в 06:19

Не используйте ключевое слово 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.

Sáähil Kumar ответил: 13 мая 2018 в 06:41
Он не работал с той же ошибкой, я не получаю ошибку "Объект не найден", здесь возникает другая ошибка
Amit Chigadani ответил: 13 мая 2018 в 06:44
Затем попробуйте компонент .profileService вместо this.profileService
Sáähil Kumar ответил: 13 мая 2018 в 06:49
Я пробовал оба, но не работал
Sáähil Kumar ответил: 13 мая 2018 в 06:50
почему его высказывание не могло найти объект?
Amit Chigadani ответил: 13 мая 2018 в 06:57
Можете ли вы показать свой полный тестовый файл? И как вы издеваетесь над ProfileStub?