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');
并摆脱被调用的期望。
我有一个组件依赖于 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');
并摆脱被调用的期望。