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

Kee*_*Kee 5 testing asynchronous callback reactjs jest

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

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

  fetchData(callback);
});
Run Code Online (Sandbox Code Playgroud)

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

rob*_*lep 5

函数具有一个.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
Run Code Online (Sandbox Code Playgroud)

这就是Jest知道测试处理程序需要done回调的方式,并且它将假定测试是异步的。