Javascript 使用async beforeAll-Jest 24时,test.each中未定义的var为全局变量

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']

我有一个测试,它进行API调用,创建一个字符串数组,然后在
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"