spyOn не работает над зависимостью в модульных тестах Angular 7 - PullRequest
0 голосов
/ 31 октября 2019

У меня есть компонент, который зависит от SearchAttributeService . Существует метод с именем searchAttributeValidation , который возвращает Subject . Я подписываюсь на эту тему следующим образом:

  attributeSearchValidation(): void {
    this._searchAttributeService.searchAttributeValidation.subscribe((value: string) => {
      if (value === this._searchAttributeService.emptyAttributeSearchData) {
        this.searchAttributeIndicator = true;
      } else if (value === this._searchAttributeService.clearEmptyAttributeSearchDataValidation) {
        this.searchAttributeIndicator = false;
    });
  }

get searchAttributeValidation(): Subject<string> {
   return this.searchAttributeValidationSubject;
}

Я пытаюсь проверить этот метод следующим образом:

  searchAttributeService = TestBed.get(SearchAttributeService);
  let spy = spyOn(searchAttributeService, 'searchAttributeValidation').and.returnValue(of('EMPTY-DATA'));
  component.attributeSearchValidation();
  expect(spy).toHaveBeenCalled();
  expect(component.searchAttributeIndicator).toBeTruthy();

Он не вызывает searchAttributeValidation методвообще во время теста. Я даже предоставил сервис TestBed.configureTestingModule ({

Тест завершается неудачно с сообщением: Ожидается, что был вызван spy searchAttributeValidation.

Гдея ошибаюсь? Потратил на это целый день, но не смог разобраться в проблеме?

1 Ответ

1 голос
/ 31 октября 2019

spyOn для методов, но вы обращаетесь к свойству, если бы это был метод, вы бы обращались к нему, как

this._searchAttributeService.searchAttributeValidation().subscribe

с параметрами call ().

Если этозатем для свойства getter используйте spyOnProperty или, если это свойство экземпляра, переназначьте его.

searchAttributeService.searchAttributeValidation = of('EMPTY-DATA');

и избавьтесь от ожидаемого вызова.

...