【问题标题】:Testing the Observer complete event with Jest?用 Jest 测试观察者完成事件?
【发布时间】:2019-04-09 06:43:14
【问题描述】:

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()} 行,因为它从未真正触发过。有没有办法检查回调没有运行?

【问题讨论】:

    标签: javascript typescript rxjs jestjs


    【解决方案1】:

    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 被烘焙到 fn 函数返回的 Observable&lt;Result 中。

    【讨论】:

      【解决方案2】:
      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-19
        相关资源
        最近更新 更多