スタブしたいprocess.env.FOO
with bar
。
var sinon = require('sinon');
var stub = sinon.stub(process.env, 'FOO', 'bar');
よくわかりません。ドキュメントを読みましたが、まだ理解できません。 sinonjs docs
sinonjsは1つの例であり、sinonjsは大丈夫ではありません。
process.env
の私の理解から、そのプロパティを設定するときに、他の変数と同じように扱うことができます。ただし、process.env
のすべての値は文字列でなければならないことに注意してください。したがって、テストで特定の値が必要な場合:
it('does something interesting', () => {
process.env.NODE_ENV = 'test';
// ...
});
状態が他のテストに漏れないようにするには、変数を必ず元の値にリセットするか、完全に削除してください。
afterEach(() => {
delete process.env.NODE_ENV;
});
process.env
単体テストで複製し、ティアダウンメソッドで復元することで適切にスタブ化する。
モカを使用した例
const env = Object.assign({}, process.env);
after(() => {
process.env = env;
});
...
it('my test', ()=> {
process.env.NODE_ENV = 'blah'
})
これは、テストする関数でprocess.envが読み込まれている場合にのみ機能することに注意してください。たとえば、テストしているコードが変数を読み取り、クロージャーで使用している場合は機能しません。キャッシュされた要求を無効にして、適切にテストする必要があります。
たとえば、次はenvスタブがありません:
const nodeEnv = process.env.NODE_ENV;
const fnToTest = () => {
nodeEnv ...
}
spec-helper.coffee
またはsinonサンドボックスを設定した同様の場所で、元のprocess.env
を追跡し、各テストの後にそれを復元します。これにより、テスト間でリークが発生せず、覚えておく必要がありません。毎回リセットします。
_ = require 'lodash'
sinon = require 'sinon'
beforeEach ->
@originalProcessEnv = _.cloneDeep process.env
afterEach ->
process.env = _.cloneDeep @originalProcessEnv
テストでは、通常どおりprocess.env
を使用します。
it 'does something based on an env var', ->
process.env.FOO = 'bar'
Sinonを使用すると、このような変数をスタブ化できます。
const myObj = {
example: 'oldValue',
};
sinon.stub(myObj, 'example').value('newValue');
myObj.example; // 'newValue'
この例は、フォームsinonのドキュメントです。 https://sinonjs.org/releases/v6.1.5/stubs/
その知識があれば、あらゆる環境変数をスタブ化できます。あなたの場合、次のようになります。
let stub = sinon.stub(process.env, 'FOO').value('bar');