模拟在Angular 2中返回observable的服务调用?

vin*_*nux 9 angular

我一直在尝试模拟一些在我的Angular应用程序中返回observable的服务调用,但是我根本无法创建一个有效的observable来触发类似catch()map()在我的代码中的调用.例如:

我的服务:

create(): Observable<any> {
    return this.http
    .post('/api/stuff', { id: 123 })
    .catch(this.handleError)
    .map(this.extractData);
}
Run Code Online (Sandbox Code Playgroud)

我的规格:

let authHttpMock = mock(AuthHttp);
when(authHttpMock.post('/api/stuff', { id: 123 })).thenReturn(Observable.create(observer => {
  observer.error(new Error('500!'));
}));

const myService = new MyService(instance(authHttpMock));
myService.create({ id: 123 }).subscribe(
    result => {
    expect(result).toBeTruthy();
    }
);
Run Code Online (Sandbox Code Playgroud)

覆盖率分析告诉我该handleError方法从未执行过.在成功观察的情况下,它也不会通过该extractData方法.

那可观察到哪里去了?我如何返回一个适当的可观察量来测试这样的调用?

bir*_*win 2

在你的测试代码中的某个地方我相信你需要有这个代码:

AuthHttp.post('/api/stuff', {id : 123 }).subscribe(data => {});
Run Code Online (Sandbox Code Playgroud)