【发布时间】:2023-04-01 17:47:02
【问题描述】:
我正在尝试在我的 Angular 应用程序中测试一个相当复杂的服务。为此,我需要能够模拟服务具有的不同依赖项的数量,我正在使用间谍来实现这一点。
该服务使用其构造函数中的两个依赖项做了一些不同的事情,在我开始测试服务之前,我需要确保它正确构造,因此我需要满足构造函数的要求。
构造函数有两个单独的订阅,一个在返回Observable<string> 的方法上,一个在BehaviourSubject<boolean> 上。
constructor(
private _translate: TranslateService,
private _policiesService: PoliciesService,
) {
_translate.get('services.filter').subscribe((filterObject: any) => {
// do stuff...
});
this._policiesService.isPolicyLocked.subscribe(activePolicyLockState => {
// do stuff...
});
}
我可以轻松地模拟第一个订阅,方法是使用一个间谍,然后在我的 beforeEach() 中分配一个方法和一个返回值,如下所示。
beforeEach(() => {
spy_TranslateService = jasmine.createSpyObj('TranslateService', ['get', 'setDefaultLang']);
spy_TranslateService.get.and.returnValue(of(translationFilterObject));
//etc..
});
但我不能对我的行为主题执行此操作,因为它不是一种方法,它是 PoliciesService 的属性。有没有一种方法可以模拟一个属性并给它一个特定的返回值,类似于我如何使用方法?最好不必使用 getter 和 setter。
【问题讨论】:
-
您查看 Jasmine 的
spyOnProperty了吗?我还没有使用它,但也许它对你的情况有所帮助。这是一个可能有帮助的对话:stackoverflow.com/questions/20879990/…
标签: angular jasmine karma-runner