我有一个角度服务,其中一种方法侦听状态变化并返回可观察到的结果,但是同一服务的其他方法执行转换逻辑:
ngOnInit() {
this.isLoading = true;
this.myService.stateListener().subscribe((res: any) => {
this.data = this.myService.transformModel(res);
this.isLoading = false;
this.cd.detectChanges();
}, (err) => {
this.errMessage = 'Data could not be loaded';
this.isLoading = false;
});
}
在测试中,我模拟状态侦听器以返回特定的可测试数据,如下所示:
const mockService = jasmine.createSpyObj('myService', ['stateListener']);
mockService.stateListener.and.returnValue(of({
number: 107,
mock: someMock
}));
问题在于,因为我已经模拟了服务,所以方法'transformerModel'不再存在(在模拟服务上),因此绑定到组件的数据是'undefined'。
是否有一种方法可以只模拟返回的observable(stateListener),而不模拟相同服务的转换器方法?
答案 0 :(得分:1)
let testData={}// stubbed response of Observable or Model
let dataStub=fixture.debugElement.injector.get(MyService);
spyOn(dataStub, 'stateListener').and.returnValue(
Observable.of(testData)
);
您可以使用stub
和returnValue
和Observable.of
对其进行存根并返回可观察对象。