spyOn 无法处理 Angular 7 个单元测试中的依赖项

spyOn not working on a dependency in Angular 7 unit tests

我有一个组件依赖于 SearchAttributeService。有一个名为 searchAttributeValidation 服务的方法 returns 一个 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({

测试失败并显示消息:预期已调用间谍 searchAttributeValidation。

我哪里错了??折腾了一天,还是没找到问题所在?

spyOn 用于方法,但您正在访问 属性,如果它是一种方法,您将像

一样访问它
this._searchAttributeService.searchAttributeValidation().subscribe

配合call()参数。

如果它是 getter 属性 然后使用 spyOnProperty 或者如果它是一个实例 属性 然后重新分配它。

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

并摆脱被调用的期望。