издевательство над 'pipe' в тестах jasmine и TypeError: невозможно прочитать свойство 'pipe' of undefined

У меня проблема с тестами. Я получаю сообщение об ошибке: TypeError: Cannot read property 'pipe' of undefined

метод в директиве:

@HostListener('mouseenter')
  onMouseenter(): void {
    forkJoin([
      this.dateService.formatDate(dateStart).pipe(take(1)),
      this.dateService.formatDate(dateEnd).pipe(take(1))
    ]).subscribe((dates) => {
      this.showTooltip(`${dates[0]} - ${dates[1]}`);
    });
  }

(formatDate возвращает наблюдаемую строку)

в тесте:

fit('should call mouse enter', () => {
    directive.onMouseenter();
    expect(directive.showTooltip).toHaveBeenCalled();
  });

я должен как-то издеваться над трубой? Благодарность!


person nauris-m    schedule 05.03.2020    source источник
comment
Что dateService.formatDate возвращается?   -  person Andrew Allen    schedule 05.03.2020
comment
он возвращает Observable ‹string›   -  person nauris-m    schedule 05.03.2020
comment
Ясно, что dateService.formatDate не возвращает то, что вы ожидаете. Вы настроили макет и возвращаемое значение?   -  person Podge    schedule 05.03.2020
comment
Эти пользователи правы, вы, скорее всего, неправильно dateService издеваетесь. Если вы предоставите полный код набора тестов, я могу помочь вам смоделировать его.   -  person AliF50    schedule 05.03.2020
comment
Я опубликовал, как выглядит тест   -  person nauris-m    schedule 05.03.2020


Ответы (1)


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

fdescribe('TooltipDirective', () => {
  let directive: TooltipDirective;
  let mockDateService: jasmine.SpyObj<DateService>;

  beforeEach(() => {
    mockDateService = jasmine.createSpyObj('dateService', ['formatDate']);
    directive = new TooltipDirective(null, null, mockDateService);
    directive.tooltipData = {dateStart: new Date(), endDate: Date()};

    spyOn(directive, 'showTooltip');
  });

  fit('should show tooltip', () => {
    directive.onMouseenter();
    expect(directive.showTooltip).toHaveBeenCalled();
  });
});
person nauris-m    schedule 05.03.2020