我一直在尝试对包装Promise的Observable中的错误处理进行单元测试,而我似乎根本无法捕获到该错误。
我正在从一个承诺中设置一个可观察的对象,该承诺将被拒绝,然后从spyOn返回它。这适用于正确解决的诺言,但是在拒绝时,出现错误:“错误:未捕获(在诺言中):错误”
我的代码:
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]);
})
);
感谢您的帮助!
答案 0 :(得分:1)
您的Promise
的构建不正确。
请参见MDN:
执行者
与参数resolve和reject一起传递的函数。 executor函数由Promise实现立即执行,传递了resolve和reject函数(在Promise构造函数甚至返回创建的对象之前调用executor)。
...执行器的返回值被忽略。
在任何情况下,您都无需手动构建Promise(实际上是一种反模式)。试试:
const obs = from(Promise.reject('error'))