Жасмин: callThrough с Promise не удается вернуть (Jasmine 2.x & Angular.io) - PullRequest
0 голосов
/ 06 февраля 2019

У меня проблемы с моими тестами angular.io с жасмином (v2.99).Я создал spyObject для углового сервиса и высмеял некоторые функции.Сработало как положено.Теперь я хочу вызвать оригинальную функцию (не макет) в том же сервисе.Эта функция возвращает обещание.
Я видел, что это делается с помощью callThrough () в jasmine.Итак, вот что я сделал.И это работает до определенной степени;)

     describe('Component2Test',()=>{

      let component: Component2Test;
      let fixture: ComponentFixture<Component2Test>;
      let dataServiceSpy: jasmine.SpyObj<DataService>;

                    beforeEach(() => {

                        const dataSrvSpy = jasmine.createSpyObj('DataService', ['getUserObject', 
                       'getLocalStorageObject','getAllLocalStorageKeys','setLocalStorageObject']);
                        dataSrvSpy.getUserObject.and.returnValue(tua);
                        dataSrvSpy.getAllLocalStorageKeys.and.returnValue(Promise.resolve(localStorageData));
                        dataSrvSpy.setLocalStorageObject.and.callThrough(); <--- ?????
                 }

     TestBed.configureTestingModule({
          imports: [],
          declarations: [Component2Test],
          providers: [
            {provide: DataService, useValue: dataSrvSpy},
          ]
        });

        dataServiceSpy = TestBed.get(DataService);

        fixture = TestBed.createComponent(Component2Test);
        component = fixture.componentInstance;

});

test

 fit('should set data in localStorage', fakeAsync(() => {


dataServiceSpy.setLocalStorageObject(foundData[foundDataKeys[1]],foundDataKeys[1]).then();

    });

Хотя вызывается исходная функция, и я вижу, что данные записаны так, как я ожидал.К сожалению, Жасмин вернулась с этим сообщением об ошибке

TypeError: Cannot read property 'then' of undefined

оригинальная функция в сервисе

 setLocalStorageObject(o:object,key:string):Promise<boolean>{
          return new Promise((resolve,reject)=>{

           this._lclStrgSrv4User.storeJsonDataInLocalStorage(o,key).then((resp)=>{
              resolve(resp);
            },(err)=>{
              reject(err)
            });
          })
        }

Итак, мой вопрос:
Как правильно определить callThrough ()?

Заранее спасибо, Том

1 Ответ

0 голосов
/ 06 февраля 2019

Используя createSpyObj, вы создаете «голых» шпионов.За этим нет реализации.Это нормально, что он возвращает undefined.

Вы должны создать свой собственный макет DataService или предоставить реальный сервис, а затем добавить spyOns для перехвата вызовов.CallThrough () должен работать тогда.

...