Жасмин spyOn с Observables - используя функции стрелок против передачи функции оператору RxJs - PullRequest
0 голосов
/ 17 января 2019

У меня есть функция, фактически метод в классе Typescript с именем HouseService, который выглядит следующим образом

myHouse() {
    return this.bricks$
    .pipe(
      map(bricks => this.buildHouse(bricks)),
    );
}

этот метод прослушивает Observable, this.brick$, и как только некоторые кирпичи получают уведомление, строит дом с использованием метода `this.buildHouse (bricks: Array).

Затем я пишу тест, который проверяет, что метод this.buildHouse вызывается только один раз. Тест выглядит так и отлично работает

  it('"buildHouse()" method is called only once for one event of "bricks$"', () => {
    spyOn(houseService, 'buildHouse').and.callThrough();
    houseService.bricks$.next(newBricks);
    expect(houseService.buildHouse).toHaveBeenCalledTimes(1);
  });

Пока все отлично работает.

Теперь проблема. Я меняю реализацию метода myHouse, избавляясь от функции жирной стрелки и подставляя ее чистой ссылкой на метод, как показано ниже

myHouse() {
        return this.bricks$
        .pipe(
          map(this.buildHouse),
        );
}

Среда выполнения продолжает отлично работать, но тест больше не работает, поскольку сообщает, что buildHouse был вызван 0 раз. Кто-нибудь может объяснить, почему?

1 Ответ

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

Потому что ваша функция myHouse выполняется до того, как вы ее смените. Поэтому оригинальная (не проверенная) функция передается в map.

С помощью функции стрелки она выполняется каждый раз, когда карта вызывает свой обратный вызов - в это время buildHouse уже подвергается насмешке.

...