【Jest】テスト用の環境変数を設定する
テスト時に読み込む環境変数の設定のメモ。
環境
- Jest 29.2.2
- TypeScript 4.8.4
- Node.js 16.17.1
結論
jest.configのglobalSetup
オプションに環境変数を定義する関数を指定する
やりたかったこと
複数のテストファイルで共通的に使うテスト用の環境変数を設定したい
これまでやったことがある方法
- jestのテストコマンドの実行前に環境変数を設定する
- テストファイルの先頭(import文より前)で環境変数を上書きする
- jestが自動で設定する環境変数(NODE_ENV=TEST)に合致した時にテスト用の環境変数を設定する
const env1 = process.env.NODE_ENV == "TEST" ? "env_test" : "env"
どうやるのか
jest.configのglobalSetup
オプションを使用します。
テストが実行される前に実行したい関数をglobalSetup
に指定します。
環境変数を登録する関数を1つ用意するだけで、全テスト共通的にテスト用の環境変数を使用できます。
jest.config.js
module.exports = {
clearMocks: true,
moduleFileExtensions: ["js", "jsx", "ts", "tsx"],
roots: ["<rootDir>/src"],
testEnvironment: "node",
transform: {
"^.+\\.tsx?$": "ts-jest",
},
moduleNameMapper: {
"^@/(.*)$": "<rootDir>/src/$1",
},
moduleDirectories: ["node_modules", "<rootDir>"],
globalSetup: "<rootDir>/src/tests/setupEnv.ts", // ←これ
};
src/tests/setupEnv.tsに環境変数を設定する関数を定義してexportします。
非同期関数も使用できです。
src/tests/setupEnv.ts
export default (): void => {
console.log("\nSetup test environment");
process.env.ENV1 = "test";
console.log("process.env.ENV1", process.env.ENV1);
return;
};
定義した環境変数の確認だけ行うサンプルテストを用意します。
src/tests/sample.test.ts
describe("sample test", () => {
test("環境変数の確認", () => {
expect(process.env.ENV1).toBe("test");
});
});
テストの実行結果は以下のとおりです。
テストが実行される前に環境変数の読み込みが行われていること、テストでは無事に環境変数を読み込むことができました。
% ./node_modules/.bin/jest
Determining test suites to run...
Setup test environment
process.env.ENV1 test
PASS src/tests/sample.test.ts
sample test
✓ 環境変数の確認 (1 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.19 s, estimated 1 s
Ran all test suites.
jestのドキュメントを読んでいてjest.configで気になったオプション notify
OSの通知機能でテストの実行結果を通知してくれます。
インストール
yarn add --dev node-notifier
jest.config
module.exports = {
...
notify: true,
};
画面の右上にテストの実行結果が通知されました。
notifyMode
オプションで通知する条件を定義できます。
always: always send a notification.
failure: send a notification when tests fail.
success: send a notification when tests pass.
change: send a notification when the status changed.
success-change: send a notification when tests pass or once when it fails.
failure-change: send a notification when tests fail or once when it passes.
以上です。
NCDC株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion