Как смоделировать служебный вызов в функции при угловом модульном тестировании? - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь написать контрольный пример для следующей функции:

foo = () => { 
  this.someService.getDetails({key:'value'}).subscribe(details => {
  //do stuff
    this.someService.getMoreDetails().subscribe(moreDetails => {
    //do stuff
   });
  });
}

Сервис выглядит так:

    getDetails = (args) :Observable<any> {
      return this.http.post<any>(//calls)
    } 
// similar for getMoreDetails

Тестовый файл, который я написал, выглядит следующим образом:

     const someServiceStub = jasmine.createSpyObj('someService', ['getDetails', 'getMoreDetails']);
...
...

    it('should called getMoreDetails', () => {
        component.foo();
        fixture.detectChanges();
        someServiceStub.getDetails.and.returnValue(Observable.of
          ({ Details: 'Tired of giving you details'})
        );
        expect(someServiceStub.getMoreDetails).toHaveBeenCalled();
      });

Однако мой тестовый пример не дает ошибку «Невозможно прочитать подписку на свойство undefined» (для первой строки внутри функции foo).

Я тоже пытался использовать классы mockservice, но появляется та же ошибка. Какова возможная причина этого и как я могу ее решить?

1 Ответ

0 голосов
/ 05 января 2019

Вы начинаете с вызова функции foo(), которая вызывает метод getDetails() службы. Этот метод является шпионом, и вы никогда не говорили шпиону, что возвращать, поэтому он возвращает неопределенное значение.

Затем вы говорите шпиону, что возвращать. Это слишком поздно: сервисный звонок уже сделан. Скажите шпиону, что вернуть до звонка foo().

...