Mat*_*mat 68 stub node.js sinon
我想存根process.env.FOO使用bar.
var sinon = require('sinon');
var stub = sinon.stub(process.env, 'FOO', 'bar');
Run Code Online (Sandbox Code Playgroud)
我糊涂了.我看过文件,但我还是不明白.sinonjs docs
sinonjs是一个例子,不是sinonjs没关系.
Jos*_*ton 61
根据我的理解process.env,您可以在设置其属性时将其视为任何其他变量.但请记住,每个值都process.env必须是一个字符串.因此,如果您在测试中需要特定值:
it('does something interesting', () => {
process.env.NODE_ENV = 'test';
// ...
});
Run Code Online (Sandbox Code Playgroud)
要避免将状态泄漏到其他测试中,请确保将变量重置为其原始值或完全删除它:
afterEach(() => {
delete process.env.NODE_ENV;
});
Run Code Online (Sandbox Code Playgroud)
pll*_*lee 25
process.env通过克隆它并在拆卸它的拆卸方法中,我能够在单元测试中正确地进行存根.
使用Mocha的示例
const env = Object.assign({}, process.env);
after(() => {
process.env = env;
});
...
it('my test', ()=> {
process.env.NODE_ENV = 'blah'
})
Run Code Online (Sandbox Code Playgroud)
请记住,仅当您正在测试的函数中读取process.env时,此方法才有效.例如,如果您正在测试的代码读取变量并在闭包中使用它,则它将无法工作.您可能会使缓存的require无效以进行正确的测试.
例如,以下将没有env存根:
const nodeEnv = process.env.NODE_ENV;
const fnToTest = () => {
nodeEnv ...
}
Run Code Online (Sandbox Code Playgroud)
小智 9
如果您想存根 process.env 中不存在的密钥,则可以使用此方法
const sinon = require('sinon')
let sandbox = sinon.createSandbox();
sandbox.stub(process, 'env').value({ 'SOME_KEY': 'SOME_VALUE' });
Run Code Online (Sandbox Code Playgroud)
使用 sinon,您可以像这样存根任何变量。
const myObj = {
example: 'oldValue',
};
sinon.stub(myObj, 'example').value('newValue');
myObj.example; // 'newValue'
Run Code Online (Sandbox Code Playgroud)
这个例子是表单 sinon 文档。https://sinonjs.org/releases/v6.1.5/stubs/
有了这些知识,您就可以存根任何环境变量。在您的情况下,它看起来像这样:
let stub = sinon.stub(process.env, 'FOO').value('bar');
Run Code Online (Sandbox Code Playgroud)
如何在单元测试期间快速模拟 process.env。
https://glebbahmutov.com/blog/mocking-process-env/
const sinon = require('sinon')
let sandbox = sinon.createSandbox()
beforeEach(() => {
sandbox.stub(process.env, 'USER').value('test-user')
})
it('has expected user', () => {
assert(process.env.USER === 'test-user', 'wrong user')
})
afterEach(() => {
sandbox.restore()
})
Run Code Online (Sandbox Code Playgroud)
但是在测试之前 process.env 中可能不存在的属性呢?您可以使用以下包,然后您将能够测试不存在的环境变量。
https://github.com/bahmutov/mocked-env
| 归档时间: |
|
| 查看次数: |
39863 次 |
| 最近记录: |