Jest 的回调测试实际上是如何工作的

Posted

技术标签:

【中文标题】Jest 的回调测试实际上是如何工作的【英文标题】:How does Jest's callback testing actually work 【发布时间】:2017-12-22 07:35:02 【问题描述】:

当使用 Jest 测试利用回调的异步代码时,您可以输入一个 done 参数,然后在测试中调用该参数。这允许测试知道在完成测试之前等到 done() 函数被调用。例如,在包含 done() 函数的回调运行之前,此代码不会完成。

test('the data is peanut butter', done => 
  function callback(data) 
    expect(data).toBe('peanut butter');
    done();
  

  fetchData(callback);
);

我的问题是,Jest 如何真正知道它何时需要等待 done() 调用?由于它存在的唯一其他地方是测试运行的函数的参数,Jest 是否有办法检查该函数中的参数?如果是这样,它是如何做到的?

【问题讨论】:

【参考方案1】:

一个函数有一个.length 属性,它返回为其声明的参数的数量:

function test0() 
function test1(arg0) 
function test2(arg0, arg1) 

console.log( test0.length ); // 0
console.log( test1.length ); // 1
console.log( test2.length ); // 2

这就是 Jest 知道您的测试处理程序需要一个 done 回调的方式,它会假设测试是异步的。

【讨论】:

谢谢!这就说得通了。 :)

以上是关于Jest 的回调测试实际上是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章

在 Jest 中测试 XMLHttpRequest onload() 回调功能

使用 Node 进行 Jest 测试 - 超时 - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调

如何在 Jest 和 Enzyme 中执行无状态组件内的函数以进行测试

如何使用 Jest 测试 Reflux 动作

超时 - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调

如何使用react-test-renderer和jest测试包含嵌套组件的反应组件?