Angular - шпионить за методом внутри блока подписки - PullRequest
1 голос
/ 03 мая 2020

У меня есть компонент со следующим методом ngOnInit ():

ngOnInit() {
  combineLatest([
    this.observable1,
    this.observable2
  ])
  .pipe(takeUntil(this.unsubscribe$))
  .subscribe(([data1, data2]) => {
    this.processData(data1, data2);
  });
}

Я хочу написать тест, чтобы убедиться, что вызывается метод processData ().

Я пытался что-то вот так:

it('should call processData', ()=> {
   ... make sure each observable1 and observable2 will emit a value
   spyOn(component, 'processData');
   fixture.detectChanges();
   expect(component.processData).toHaveBeenCalled();
}));

expect(component.processData).toHaveBeenCalled() всегда будет возвращать false, похоже, он не ждет, пока обе наблюдаемые выдают значение.

Мой вопрос: как проверить такой код? Как проверить, что метод вызывался внутри функции подписки оператора asyn c rx js?

1 Ответ

0 голосов
/ 04 мая 2020

Первый вопрос: что делают this.observable1 и this.observable2?

Чтобы вызвать this.processData, они оба должны излучать хотя бы один раз. Могу ли я сказать, что вы могли бы поделиться большим количеством кода теста и узнать, как создаются observable1 и observable2.

Я бы предложил изменить тест на следующий стиль

it('should call processData', ()=> {
   // firstly set the spy
   spyOn(component, 'processData');

   // secondly we need to fake our observables
   component.observable1 = of(1);
   component.observable2 = of(2);

   // now we trigger the flow
   component.ngOnInit();

   // clean up
   component.unsubscribe$.next();
   component.unsubscribe$.complete();

   // assertions
   expect(component.processData).toHaveBeenCalledWith(1, 2);
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...