【发布时间】:2017-12-14 15:44:30
【问题描述】:
我正在尝试在类似于以下的代码块上获得单元测试覆盖率,特别是调用方法来处理错误的 catch 块:
return this._http.get(/someurl)
.map((response: Response) => {
let results = <any>response.json();
return results;
})
.catch(response => {
return this.handleError(response);
});
我已经尝试过:
it('Should call base handleError method when an error occurs',
fakeAsync(inject([MyService, MockBackend],
(myService: MyService, mockBackend: MockBackend) => {
mockBackend.connections.subscribe((connection: MockConnection) => {
expect(connection.request.url).toEqual(
`/someurl`
);
connection.mockRespond(new Response(new ResponseOptions({
status: 404
})));
});
spyOn(myService, 'handleError');
myService.getData(1);
tick();
expect(myService.handleError).toHaveBeenCalled();
})));
catch 块永远不会被调用,并且测试失败,因为间谍从未被击中。我试过使用 MockConnection.mockError 也没有运气。我已经看到需要在 Observable 上使用订阅错误处理程序的帖子,但是也必须有一种方法可以通过错误响应来触发 catch 块?我尝试通过 Observable.throw() 抛出 Observable 失败,但这似乎也没有让我走上正确的道路。
【问题讨论】:
标签: angular unit-testing jasmine rxjs