How do I save a value in global in Jest during test setup?
Setting an env variable like process.env.SESSION_KEY = sessionKey
from globalSetup
seems to work for me in subsequent tests.
I can access the value properly from any test. Not sure if this is a bug or a feature.
I spend a lot of time figuring this out right. The only fully working solution was using testenvironments. This supports async functions as well as globals properly. Each test suite uses a separate instance of the testenvironment.
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;
I added a reference to this file in the Jest Config: "testEnvironment": "./testEnvironment"
for the file testEnvironment.js
I'm not sure though why there are so many different config options like setupFiles, globals, testEnvironment, ...
globalSetup
/globalTeardown
can't be used to inject context/global variables to sandboxed test suites/files. Use setupFiles
/setupFilesAfterEnv
instead.
Other way you can customize the test runtime through testEnvironment
, more details see here: Async setup of environment with Jest