如何在node.js中存储process.env?

我想用“bar”存根process.env.FOO。

var sinon = require('sinon'); var stub = sinon.stub(process.env, 'FOO', 'bar'); 

我很困惑。 我读了文件,但还是不明白。 sinonjs文档

sinonjs是一个例子,不sinonjs是好的。

从我对process.env理解中,你可以简单的把它当成任何其他variables来处理。 但请记住, process.env中的每个值都必须是一个string。 所以,如果你在testing中需要一个特定的值:

  it('does something interesting', () => { process.env.NODE_ENV = 'test'; // ... }); 

为了避免将状态泄露到其他testing中,请确保将该variables重置为其原始值或完全删除它:

  afterEach(() => { delete process.env.NODE_ENV; }); 

我能够通过克隆它,并在恢复它的拆卸方法中将process.env正确保存在我的unit testing中。

使用摩卡的例子

 const env = Object.assign({}, process.env); after(() => { process.env = env; }); ... it('my test', ()=> { process.env.NODE_ENV = 'blah' }) 

请记住,只有在您正在testing的函数中只读取process.env时,这才会起作用。 例如,如果您正在testing的代码读取variables并在closures中使用它,则不起作用。 您可能会使caching的要求无效,以正确地进行testing。

比如下面的env就不会有stubbed了:

 const nodeEnv = process.env.NODE_ENV; const fnToTest = () => { nodeEnv ... } 

在一个spec-helper.coffee或者类似的地方你可以设置你的sinon沙盒,跟踪原始的process.env并且在每次testing后恢复它,所以你不会在testing之间泄漏,也不必记得重置每次。

 _ = require 'lodash' sinon = require 'sinon' beforeEach -> @originalProcessEnv = _.cloneDeep process.env afterEach -> process.env = _.cloneDeep @originalProcessEnv 

在你的testing中,正常使用process.env

 it 'does something based on an env var', -> process.env.FOO = 'bar'