如何在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'