javascript – 使用Jest测试Observer完成事件?

RxJS Observer触发事件:

>完成
>错误
>接下来

如果我们想用Jest测试完整的事件.这是怎么做到的?

例如,我们可以测试下一个和错误事件,因为这些函数传递数据:

o.subscribe(result => {
  expect(result.data.length).toEqual(1);
}, 
(e)=>{expect(e).toBeFalsy()}, 
()=>{ WHAT TO EXPECT HERE? }

完整的事件没有.函数签名是()=> void.我们如何测试该功能签名?

行(e)=> {expect(e).toBeFalsy()}因为它实际上从未触发过.有没有办法检查回调是否没有运行?

最佳答案

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'))

通过:

> https://jestjs.io/docs/en/tutorial-async
> https://github.com/ReactiveX/rxjs/issues/3482#issuecomment-385106653

此外,由于Jest将在抛出错误时失败,因此您可以在其测试中使用任何测试框架.例如. import’rxjs / testing’,like described here

点赞