I have a global setup in Jest.
"jest": {
"globalSetup": "./setup.js"
}
Within the setup, I have an async function which writes a session key to global
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;
Whatever session key I am saving in global is not available in the test file. global.sessionKey is undefined in the below test.
test("create session", () => {
expect(global.sessionKey).toBeTruthy();
});
I want some way to set the sessionKey in a global object from setup file. The session key should be available before I run any of my tests.
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
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, ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With