确定函数是否接受参数

时间:2018-07-05 10:08:49

标签: javascript jestjs

我为玩笑测试写了错误的代码。

scrapy crawl quotes

我得到了预期的错误:

  

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

但是,如果我删除了test('init data', (done) => { expect(services.getList).toHaveBeenCalled(); // accept done as param, but not called }); 参数,则会通过

done

怎么能知道我接受了test('init data', () => { expect(services.getList).toHaveBeenCalled(); }); 参数?太神奇了!

1 个答案:

答案 0 :(得分:3)

  

jest如何知道我接受了done参数?

在这两个代码示例中,有两种方法可以知道:

  1. 通过查看回调的length属性,第一种情况为1,第二种情况为0。函数的length是它的 arity (它声明的形式参数的数量¹)。
  2. 使用Function#toString并解析其提供的代码。在一般情况下,您不需要在生产代码中执行此操作,但是对于测试工具来说绝对可以。

示例:

function test(label, callback) {
  console.log(`${label}: length: ${callback.length}`);
  console.log(`${label}: toString(): ${callback.toString()}`);
}
test('init data', (done) => {
  // ...
});

test('init data', () => {
  // ...
});


¹在JavaScript中,它是声明不计算剩余参数(如果有的话)或第一个参数中具有默认值及以后的任何参数的形式参数的数量。