如何对我的 Observable 的 catch 主体进行单元测试
How to unit test the catch body of my Observable
在我的 Angular
应用程序中,我按以下方式使用 Observables
:
getItem(id): Observable<Object> {
return this.myApi.myMethod(...).catch(e => {
/* CATCH BODY */
return Observable.throw(e);
});
}
然后我对其进行了单元测试:
it('getItem(...) should correctly do its job',
inject([MyService], (service: MyService) => {
const spy = spyOn(myApi, 'myMethod').and.returnValue(mockObservable);
const mockData = 'mock'; // can be anything
const mockObservable = Observable.of(mockData);
service.getItems().subscribe((data) => {
expect(data).toEqual(mockData);
});
expect(spy).toHaveBeenCalledWith(...);
})
);
但是,我不知道如何对 CATCH BODY
进行单元测试,如何模拟 observable
以抛出错误?
我知道已经有人问过类似的问题,但我的情况略有不同,我无法成功对 catch 部分进行单元测试。
创建另一个 it
块,而不是使用 Observable.of
使用 Observable.throw
,它将创建一个 Observable
,它不发出任何项目并以错误终止
it('getItem(...) should fail',
inject([MyService], (service: MyService) => {
const mockData = 'mock'; // can be anything
const mockObservable = Observable.throw(mockData); // make it fail
const spy = spyOn(myApi, 'myMethod').and.returnValue(mockObservable);
service.getItems().subscribe(
(data) => {
// success
},
(error) => {
expect(error).toEqual(mockData);
}
);
expect(spy).toHaveBeenCalled();
})
);
希望对您有所帮助
在我的 Angular
应用程序中,我按以下方式使用 Observables
:
getItem(id): Observable<Object> {
return this.myApi.myMethod(...).catch(e => {
/* CATCH BODY */
return Observable.throw(e);
});
}
然后我对其进行了单元测试:
it('getItem(...) should correctly do its job',
inject([MyService], (service: MyService) => {
const spy = spyOn(myApi, 'myMethod').and.returnValue(mockObservable);
const mockData = 'mock'; // can be anything
const mockObservable = Observable.of(mockData);
service.getItems().subscribe((data) => {
expect(data).toEqual(mockData);
});
expect(spy).toHaveBeenCalledWith(...);
})
);
但是,我不知道如何对 CATCH BODY
进行单元测试,如何模拟 observable
以抛出错误?
我知道已经有人问过类似的问题,但我的情况略有不同,我无法成功对 catch 部分进行单元测试。
创建另一个 it
块,而不是使用 Observable.of
使用 Observable.throw
,它将创建一个 Observable
,它不发出任何项目并以错误终止
it('getItem(...) should fail',
inject([MyService], (service: MyService) => {
const mockData = 'mock'; // can be anything
const mockObservable = Observable.throw(mockData); // make it fail
const spy = spyOn(myApi, 'myMethod').and.returnValue(mockObservable);
service.getItems().subscribe(
(data) => {
// success
},
(error) => {
expect(error).toEqual(mockData);
}
);
expect(spy).toHaveBeenCalled();
})
);
希望对您有所帮助