我为玩笑测试写了错误的代码。
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();
});
参数?太神奇了!
答案 0 :(得分:3)
jest
如何知道我接受了done参数?
在这两个代码示例中,有两种方法可以知道:
length
属性,第一种情况为1
,第二种情况为0
。函数的length
是它的 arity (它声明的形式参数的数量¹)。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中,它是声明不计算剩余参数(如果有的话)或第一个参数中具有默认值及以后的任何参数的形式参数的数量。