🐳

【Jest】テスト用の環境変数を設定する

2022/11/10に公開

テスト時に読み込む環境変数の設定のメモ。

環境

  • 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オプションを使用します。
https://jestjs.io/ja/docs/configuration#globalsetup-string

テストが実行される前に実行したい関数を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.

https://jestjs.io/ja/docs/configuration#notifymode-string

以上です。

GitHubで編集を提案
NCDCエンジニアブログ

Discussion