Load .env File in Jest
Here's how to load .env file in Jest tests.
.env File
A test suite that relies on real systems, say external APIs, might require sensitive information like API keys in order to interact with them. But as with the source code, we don't want to commit sensitive information to the test code. So, we'll rely on the values for things like API keys to be available in the environment, via environment variables.
A great way to specify environment variables in a dev environment is to write them to a non-committed file, called .env
. Then this file can be read and its contents put into the environment, making values available via process.env
.
There are a several libraries that read .env
files into the environment. My favorite is this one:
npm install dotenv --save-dev
The .env
file might read:
MY_API_KEY=abc123
And my test file that references MY_API_KEY
might read:
import { fetchMyData } from './my-api'
test('api integration', async () => {
const actual = await fetchMyData(process.env.MY_API_KEY)
expect(actual).toBe({ really: "awesome" })
})
setupFiles Config
Some tests require setup, and jest has anticipated us and provided a setupFiles
config option which will point to our setup file. We'll define our jest.config.js
file:
module.exports = {
setupFiles: ['<rootDir>/test/setup-env.js'],
}
And then test/setup-env.js
will read:
require('dotenv').config({ path: '.env' })
Now, when running jest
, the .env
file will be read and its contents will be available in the environment.