Stub/mock process.platform 否则

Stub/mock process.platform sinon

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

(这个对象是在我够不到的范围内生成的,我需要测试它可以接受的不同值)

是否可以stub/fake这个值?

我尝试了以下方法,但没有成功:

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");

你不需要诗乃来完成你需要的。虽然 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');
  });
});

sinon 的存根现在支持 "value" 函数来为存根设置新值:

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

详情请查看https://sinonjs.org/releases/latest/stubs/