Как проверить наблюдаемый поток? - PullRequest
0 голосов
/ 26 сентября 2019

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

exportToCsv(query: string) {
    this.exportToCsvService.exportDataAndGetCsv(query).pipe(
      first(),
      tap(response => this.fireCsvDownload(response))
    ).subscribe();
  }

Функция exportDataAndGetCsv выполняет вызов http и возвращает строку.Я думаю, что тест, который я написал бы, должен проверить, был ли выполнен fireCsvDownload.Я пытался:

it('should fire fireCsvDownload after exporting data and geting csv ', () => {
    component.exportToCsv(query);
    fixture.detectChanges();
    expect(component.fireCsvDownload).toHaveBeenCalled();
  });

Но я получаю сообщение об ошибке: Error: <toHaveBeenCalled> : Expected a spy, but got Function. Что мне делать?Я предоставляю exportToCsv услугу TestBed, а exportDataAndGetCsv возвращает of('text').

1 Ответ

2 голосов
/ 26 сентября 2019

Создайте шпиона, которого вы замените в expect:

it('should fire fireCsvDownload after exporting data and geting csv ', () => {

    const mySpy = spyOn(component, 'fireCsvDownload');
    component.exportToCsv(query);
    fixture.detectChanges();
    expect(mySpy).toHaveBeenCalled();
  });

Возможно, вам придется сделать:

const mySpy = spyOn(component, 'fireCsvDownload').and.callThrough();

Но я не уверен, что сам не проверю.

...