javascript - 只模拟 Angular 服务的一个方法
我有一个 Angular 服务,其中一个方法监听状态变化并返回一个可观察对象,但同一服务的其他方法执行转换逻辑:
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'。
有没有办法只模拟返回的可观察对象(stateListener),而不模拟同一服务的转换方法?
答案#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 来模拟它并返回这个可观察对象。
