RxJS Observer
触发事件:
complete
error
next
如果我们要使用Jest测试完整事件。怎么做?
例如,我们可以测试next
和error
事件,因为这些函数传递数据:
o.subscribe(result => {
expect(result.data.length).toEqual(1);
},
(e)=>{expect(e).toBeFalsy()},
()=>{ WHAT TO EXPECT HERE? }
complete
事件没有。函数签名为()=>void
。我们如何测试该功能签名?
还有(e)=>{expect(e).toBeFalsy()}
行,因为它实际上从未触发过。有没有办法检查回调不运行?
答案 0 :(得分:1)
const toPromise = obs =>
new Promise((complete, error) => {
obs.subscribe({ complete, error });
});
import { getUserEvents } as user from '../user';
// The assertion for a promise must be returned.
it('works with promises', () =>
expect(toPromise(getUserEvents(4))).resolves.toEqual('Mark'))
通过:
此外,由于Jest在抛出错误时将失败,因此您可以在其测试中使用任何测试框架。例如。 import 'rxjs/testing'
,like described here
答案 1 :(得分:0)
How to test that the error callback is not called is here。
如下所示,将测试complete
回调:
let complete = false;
let completeHandler = ()=>{
complete = true;
expect(complete).toBeTruthy()
};
let errorHandler = (e)=>{
console.log("THIS IS NEVER EXECUTED");
console.log("HOW DO WE VERIFY THAT IT IS NOT?");
let o:Observable<Result> = fn(data, errorHandler, completeHandler);
o.subscribe();
errorHandler
和completeHandler
被烘焙到Observable<Result
函数返回的fn
中。