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

Tags:

Jestjs