用Jest测试Observer complete事件?

时间:2018-11-05 21:14:04

标签: javascript typescript rxjs jestjs

RxJS Observer触发事件:

  • complete
  • error
  • next

如果我们要使用Jest测试完整事件。怎么做?

例如,我们可以测试nexterror事件,因为这些函数传递数据:

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

complete事件没有。函数签名为()=>void。我们如何测试该功能签名?

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

2 个答案:

答案 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();

errorHandlercompleteHandler被烘焙到Observable<Result函数返回的fn中。