我在Jest中有一个全局设置。
"jest": {
"globalSetup": "./setup.js"
}
在设置中,我有一个异步功能,可以将会话密钥写入全局
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;
我在全局保存的会话密钥在测试文件中不可用。 global.sessionKey在以下测试中未定义。
test("create session", () => {
expect(global.sessionKey).toBeTruthy();
});
我想用某种方法在setup文件中设置全局对象中的sessionKey。在我运行任何测试之前,会话密钥应该可用。
答案 0 :(得分:2)
globalSetup
/ globalTeardown
无法用于将上下文/全局变量注入沙盒测试套件/文件。请改用setupFiles
/ setupTestFrameworkScriptFile
。
您可以通过testEnvironment
自定义测试运行时的其他方式,更多详细信息请参见此处:Async setup of environment with Jest
答案 1 :(得分:1)
我花了很多时间弄清楚这一点。唯一可以正常工作的解决方案是使用测试环境。这支持异步功能以及正确的全局变量。每个测试套件都使用一个单独的测试环境实例。
const NodeEnvironment = require('jest-environment-node');
class TestEnvironment extends NodeEnvironment {
constructor(config) {
super(config);
}
async setup() {
await super.setup();
this.global.db = await asyncCode();
}
async teardown() {
this.global.db = null;
await asyncCode2();
await super.teardown();
}
runScript(script) {
return super.runScript(script);
}
}
module.exports = TestEnvironment;
我在Jest Config:"testEnvironment": "./testEnvironment"
中为文件testEnvironment.js
添加了对此文件的引用
我不确定为什么会有这么多不同的配置选项,例如setupFiles,globals,testEnvironment,...
答案 2 :(得分:0)
在后续测试中,从process.env.SESSION_KEY = sessionKey
设置globalSetup
之类的env变量似乎对我有用。
我可以从任何测试中正确访问该值。不确定这是错误还是功能。