我一直在试图对包含Promise的Observable处理错误进行单元测试,而我似乎无法让它捕获错误。 我正在建立一个只会拒绝承诺的观察,然后我从间谍那里返回。这适用于正确解决的承诺,但在拒绝时,我收到错误:'错误:未捕获(在承诺中):错误'
我的代码:
it(
'should not change status if unsucessful',
fakeAsync(() => {
const obs = from(
new Promise(resolve => {
return Promise.reject('error');
})).pipe(catchError( (error) => {
console.log('oh no');
return of(error);
}));
spyOn(
mockService,
'ChangeStatusToAvailable'
).and.returnValue(obs);
component.SetStatusToAvailable();
tick(200);
fixture.detectChanges();
console.log(component._status);
expect(component._status).toBe(AgentStatus[AgentStatus.disconnected]);
})
);
谢谢您的帮助!
你的Promise
构建错误。
见MDN:
执行者 使用参数resolve和reject传递的函数。执行函数由Promise实现立即执行,传递resolve和reject函数(在Promise构造函数甚至返回创建的对象之前调用执行程序)。 ...忽略执行程序的返回值。
在任何情况下,您都不需要手动构建承诺(这实际上是反模式)。尝试:
const obs = from(Promise.reject('error'))