gpt4 book ai didi

javascript - 使用 async beforeAll 时 test.each 全局中 undefined variable - Jest 24

转载 作者:行者123 更新时间:2023-12-02 22:07:34 25 4
gpt4 key购买 nike

我有一个测试,它进行 API 调用,创建一个字符串数组,然后使用 Jest test.each globalit block 内迭代它们。

describe('Something fancy', () => {
let strings;

beforeAll(async (done) => {
strings = await getStrings() // returns an array (e.g. ['foo', 'bar', 'baz']);
done(); // as per https://jestjs.io/docs/en/asynchronous#callbacks
});

test.each(strings)('string %s here', async (string) => {
console.log(string); // undefined
console.log(strings); // undefined
};
};

出于某种原因,test.each 同步运行并且“不等待”getStrings 解析,而如果我转动 test.each > 进入常规 it('tests Something', () => { console.log(strings) });,字符串确实会按预期记录:

  it('tests something', async () => {
console.log(strings); // ['foo', 'bar', 'baz']
})

为什么会发生这种情况?有解决办法吗?

最佳答案

Jest 方法内部的回调是异步执行的,因此在执行 test.each(strings) 时,strings 值仍然未定义。

有几种方法可以解决这个问题:

  1. 在测试运行之外准备数据。例如,添加 pretest npm 脚本
"pretest": "node prepare-data.js"
"test": "jest"

prepare-data.js中,您可以调用getStrings()并将结果写入临时文件,该文件将在测试中获取

  • 使用node-fibers包装异步调用

  • 切换到支持动态生成测试用例的不同测试运行程序。此问题描述了一个示例:Jest or Mocha: Dynamically create tests based on async initialization

  • 关于javascript - 使用 async beforeAll 时 test.each 全局中 undefined variable - Jest 24,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59670027/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com