How to Mock or Stub Process.argv

问题描述 投票:0回答:2

如何模拟或存根 process.argv 值以便它可以返回特定参数?

我试过像这样使用沙箱:

beforeEach(() => {
  sandbox.stub(process.argv.slice(2)[0], 'C:\\home\\project\\assignment').value('--local')
});

test("it replace value of node argument", () => {
    assert(process.argv.slice(2)[0], '--local')
});
    
afterEach(() =>{
    sandbox.restore()
})

但是我一直收到一个错误,提示尝试存根属性 *'C:\home\project ssignment' * of undefined

javascript node.js unit-testing sinon ava
2个回答
2
投票

您可以通过编程修改

process.argv
。见修改节点进程环境或参数运行时

const assert = require('assert');

describe('71476237', () => {
  let originalArgv;
  beforeEach(() => {
    originalArgv = process.argv;
  });

  afterEach(() => {
    process.argv = originalArgv;
  });

  it('it replace value of node argument', () => {
    process.argv = process.argv.concat(['node', 'C:\\home\\project\\assignment', '--local']);
    assert(process.argv.slice(2)[0], '--local');
  });
});

测试结果:

  71476237
    ✓ it replace value of node argument


  1 passing (3ms)

0
投票

保存和恢复

process.argv
的正确方法是在每次测试前让它引用原始
process.argv
的一个新的浅拷贝,这样测试时只修改副本:

const originalArgv = process.argv;

test.beforeEach(
  () => {
    process.argv = [...originalArgv];
  }
);
© www.soinside.com 2019 - 2024. All rights reserved.