在我的 Angular 应用程序中,我通过以下方式使用 Observables:
getItem(id): Observable<Object> {
return this.myApi.myMethod(...); // returns an Observable
}
我对它进行了单元测试:
it('getItem(...) should correctly do its job',
inject([MyService], (service: MyService) => {
const spy = spyOn(myApi, 'myMethod').and.returnValue(mockObservable);
const mockObservable = Observable.of('mock');
expect(service.getItem(123)).toEqual(mockObservable);
expect(spy).toHaveBeenCalledWith(...);
})
);
它工作得很好。
但是,如果我尝试使用以下方法向我的方法添加默认错误处理逻辑:getItem()
catch
getItem(id): Observable<Object> {
return this.myApi.myMethod(...).catch(e => {
/* display a notification error ... */
return Observable.throw(e);
});
}
它仍然可以正常工作,但现在测试失败了,说:
预期的对象是一种 ScalarObservable,但它是 Observable({ _isScalar: false, source: ScalarObservable({ _isScalar: true, value: 'mock', scheduler: null }), operator: CatchOperator({ selector: Function, caught: }) })。
这是什么意思?为什么会这样?我该如何解决这个问题?