如何在测试设置期间在 Jest 中保存全局值?

vij*_*yst 8 jestjs

我在 Jest 中有一个全局设置。

"jest": {
    "globalSetup": "./setup.js"
  }
Run Code Online (Sandbox Code Playgroud)

在设置中,我有一个异步函数,它将会话密钥写入全局

const axios = require('axios');

async function getSessionKey() {
    const response = await axios.post("http://apiUrl", {
        username: "K",
        password: "passw0rd"
    });
    sessionKey = response.data.sessionKey;
    global.sessionKey = sessionKey;
}

module.exports = getSessionKey;
Run Code Online (Sandbox Code Playgroud)

我在全局中保存的任何会话密钥在测试文件中都不可用。global.sessionKey 在下面的测试中未定义。

test("create session", () => {
    expect(global.sessionKey).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)

我想通过某种方式在安装文件中的全局对象中设置 sessionKey。在我运行任何测试之前,会话密钥应该可用。

Xle*_*lee 6

globalSetup/globalTeardown不能用于将上下文/全局变量注入沙盒测试套件/文件。使用setupFiles/setupTestFrameworkScriptFile代替。

您可以通过其他方式自定义测试运行时testEnvironment,更多详细信息请参见此处:Async setup of environment with Jest

  • 我应该如何使用`setupFiles`?它在文档中说我可以在 jest 子字段中将其添加为 package.json 中的一个字段,但它只说它应该是一个数组,并且默认值为“[]”。那么如果我想在那里添加一个 `jest.setTimeout(10000);` 配置,我该怎么办? (2认同)