Javascript 使用async beforeAll-Jest 24时,test.each中未定义的var为全局变量
我有一个测试,它进行API调用,创建一个字符串数组,然后在Javascript 使用async beforeAll-Jest 24时,test.each中未定义的var为全局变量,javascript,ecmascript-6,async-await,jestjs,Javascript,Ecmascript 6,Async Await,Jestjs,我有一个测试,它进行API调用,创建一个字符串数组,然后在it块中使用 出于某种原因,test.each同步运行,并且“不等待”getStrings解析,而如果我将test.each转换为常规的it('tests something',()=>{console.log(strings)}),字符串按预期记录: it('tests something', async () => { console.log(strings); // ['foo', 'bar', 'baz']
it
块中使用
出于某种原因,test.each
同步运行,并且“不等待”getStrings
解析,而如果我将test.each
转换为常规的it('tests something',()=>{console.log(strings)})代码>,字符串按预期记录:
it('tests something', async () => {
console.log(strings); // ['foo', 'bar', 'baz']
})
为什么会发生这种情况,有办法解决吗 Jest方法内部的回调是异步执行的,因此在执行test时,strings
值仍然未定义
有几种方法可以解决这个问题:
在测试运行之外准备数据。例如,添加一个pretest
npm脚本
在prepare data.js
中,您可以调用getStrings()
并将结果写入临时文件,该文件将在测试中提取
用于包装异步调用
切换到支持动态生成测试用例的其他测试运行程序。本问题中描述了一个示例:
有道理,感谢推荐节点光纤!
it('tests something', async () => {
console.log(strings); // ['foo', 'bar', 'baz']
})
"pretest": "node prepare-data.js"
"test": "jest"