Jestでprocess.envオブジェクトをテストする
Node.jsでJestを使って環境変数をテストする方法
このチュートリアルでは、Jestを使ってprocess.env
オブジェクトから環境変数を読み込み、その値に基づいて処理を行うコードをテストする方法を説明します。
テスト対象コード
以下のコードは、process.env
オブジェクトからNODE_ENV
環境変数を読み込み、その値に基づいてメッセージを出力する例です。
function getMessage() {
const env = process.env.NODE_ENV;
if (env === 'production') {
return '本番環境です';
} else {
return '開発環境です';
}
}
module.exports = getMessage;
テストコード
Jestを使って上記のコードをテストするには、以下の手順でテストコードを作成します。
jest.mock
を使ってprocess.env
オブジェクトをモック化します。- テスト対象コードからモジュールを読み込み、テストケースごとに
process.env.NODE_ENV
を設定します。 - テスト対象コードを実行し、期待通りのメッセージが出力されることを確認します。
jest.mock('process', () => {
const originalProcess = jest.requireActual('process');
return {
...originalProcess,
env: {
NODE_ENV: 'production',
},
};
});
const getMessage = require('./getMessage');
describe('getMessage', () => {
it('should return "本番環境です" when NODE_ENV is set to "production"', () => {
const message = getMessage();
expect(message).toBe('本番環境です');
});
it('should return "開発環境です" when NODE_ENV is not set to "production"', () => {
jest.resetModules();
jest.mock('process', () => {
const originalProcess = jest.requireActual('process');
return {
...originalProcess,
env: {},
};
});
const message = getMessage();
expect(message).toBe('開発環境です');
});
});
ポイント
jest.mock
を使ってモック化することで、テスト対象コードが実際にprocess.env
オブジェクトを読み込むことなく、テストコード側で環境変数を設定することができます。- テストケースごとに
process.env
オブジェクトの設定を変更することで、さまざまな環境での動作をテストすることができます。
この方法を参考に、環境変数を含むコードを安心してテストできるようにしましょう。
// getMessage.js
function getMessage() {
const env = process.env.NODE_ENV;
if (env === 'production') {
return '本番環境です';
} else {
return '開発環境です';
}
}
module.exports = getMessage;
以下のコードは、Jestを使ってgetMessage
関数をテストする例です。
// getMessage.test.js
jest.mock('process', () => {
const originalProcess = jest.requireActual('process');
return {
...originalProcess,
env: {
NODE_ENV: 'production',
},
};
});
const getMessage = require('./getMessage');
describe('getMessage', () => {
it('should return "本番環境です" when NODE_ENV is set to "production"', () => {
const message = getMessage();
expect(message).toBe('本番環境です');
});
it('should return "開発環境です" when NODE_ENV is not set to "production"', () => {
jest.resetModules();
jest.mock('process', () => {
const originalProcess = jest.requireActual('process');
return {
...originalProcess,
env: {},
};
});
const message = getMessage();
expect(message).toBe('開発環境です');
});
});
このコードを実行すると、以下のテスト結果が出力されます。
PASS ./getMessage.test.js
✓ should return "本番環境です" when NODE_ENV is set to "production" (5ms)
✓ should return "開発環境です" when NODE_ENV is not set to "production" (6ms)
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 7.62s
Ran all test suites.
このサンプルコードを参考に、環境変数を含むコードをテストしてみてください。
Jestで環境変数をテストするその他の方法
.env
ファイルは、環境変数を設定するためのファイルです。Jestは.env
ファイルを読み込み、テスト中に環境変数を設定することができます。
.env
ファイルの例:
NODE_ENV=production
.env
ファイルを使う方法は、以下の手順で行います。
.env
ファイルを作成し、環境変数を設定する。- Jestの設定ファイル(
jest.config.js
)で.env
ファイルを読み込む。
jest.config.js
の例:
module.exports = {
...
env: {
'NODE_ENV': 'test',
},
...
};
- テストコードで
process.env
オブジェクトから環境変数を読み込む。
この方法は、環境変数をテストケースごとに変更する必要がある場合に便利です。
--envオプションを使う
jest
コマンドの--env
オプションを使って、テスト実行時に環境変数を設定することができます。
jest
コマンドを実行する際に--env
オプションを指定し、環境変数を設定する。
例:
jest --env NODE_ENV=production
この方法は、特定の環境でのみテストを実行したい場合に便利です。
環境変数モジュールを使う
dotenv
などの環境変数モジュールを使って、テストコード内で環境変数を設定することができます。
dotenv
モジュールをインストールする。
npm install dotenv
- テストコードで
dotenv
モジュールを読み込み、環境変数を設定する。
require('dotenv').config();
const message = getMessage();
expect(message).toBe('本番環境です');
Jestで環境変数をテストするには、さまざまな方法があります。
それぞれの方法のメリットとデメリットを理解し、状況に合わせて使い分けることが重要です。
node.js testing environment-variables