Stub / mock process.platform sinon

时间:2015-06-07 02:01:21

标签: node.js mocking sinon stub

我正在使用process.platform并希望将该字符串值存根以伪造不同的操作系统。

(这个对象是我无法实现的,我需要针对不同的值进行测试)

是否可以存根/伪造此值?

我试过以下没有运气:

stub = sinon.stub(process, "platform").returns("something")

我收到错误TypeError: Attempted to wrap string property platform as function

如果我尝试使用这样的模拟,会发生同样的事情:

mock = sinon.mock(process);
mock.expects("platform").returns("something");

2 个答案:

答案 0 :(得分:8)

你不需要Sinon来完成你需要的东西。虽然process.platform流程不是writable,但它是configurable。因此,您可以暂时重新定义它,并在完成测试后立即恢复它。

这是我将如何做到的:

var assert = require('assert');

describe('changing process.platform', function() {
  before(function() {
    // save original process.platform
    this.originalPlatform = Object.getOwnPropertyDescriptor(process, 'platform');

    // redefine process.platform
    Object.defineProperty(process, 'platform', {
      value: 'any-platform'
    });
  });

  after(function() {
    // restore original process.platfork
    Object.defineProperty(process, 'platform', this.originalPlatform);
  });

  it('should have any-platform', function() {
    assert.equal(process.platform, 'any-platform');
  });
});

答案 1 :(得分:0)

sinon的存根支持“值”功能,现在可以为存根设置新值:

sinon.stub(process, 'platform').value('ANOTHER_OS');
...
sinon.restore() // when you finish the mocking

有关详细信息,请从https://sinonjs.org/releases/latest/stubs/进行检查