- ターゲット:Node.jsで環境変数に依存するモジュールをテストする
- ゴール:環境変数をテスト内で有効化、無効化、値の変更を行う
- 前提
- mocha: ^5.2.0
- sinon: ^7.2.7
早速進めていきましょうー
重要ポイント
環境変数をstubする為に、気をつけることがあります。
それは、「存在しない環境変数はstubできない」という事。
知らないと地味にハマるので気を付けてください。
落とし穴対策
こういう地味な落とし穴にかからないように、beforeEachとかで事前に設定すると良いです。
var sinon = require('sinon');
describe('sampleTest', function () {
var sandbox;
beforeEach(function (done) {
process.env.TEST_ENV = '';
sandbox = sinon.createSandbox();
done();
});
...
}
こんな感じ
TEST_ENV
という環境変数を空文字で設定しています。これを各テストケースの中で設定するイメージです。
きちんと解放しようね
次に、環境変数をstubしたら、その結果をクリアしないといけません。
設定値が残り続けていると、他のテストに影響してしまうからです。なので、
...(略)
afterEach(function (done) {
sandbox.restore();
done();
});
...
という具合にしておきます。
本題のstub
お待たせしました。実際にstubしましょ。
... (略)
it('環境変数 TEST_ENV に hello を設定', done => {
sandbox.stub(process.env, 'TEST_ENV').value('hello');
console.log(process.env.TEST_ENV);
done();
});
...
これだけです。簡単!
ちなみに、process.envの削除は delete process.env.TEST_ENV;
でできます。
最終形
var sinon = require('sinon');
describe('sampleTest', function () {
var sandbox;
beforeEach(function (done) {
process.env.TEST_ENV = '';
sandbox = sinon.createSandbox();
done();
});
afterEach(function (done) {
sandbox.restore();
done();
});
it('環境変数 TEST_ENV に hello を設定', done => {
sandbox.stub(process.env, 'TEST_ENV').value('hello');
console.log(process.env.TEST_ENV);
done();
});
});
ではでは