【问题标题】:Stub/mock process.platform sinonStub/mock process.platform sinon
【发布时间】:2015-08-21 18:01:28
【问题描述】:

我正在使用 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");

【问题讨论】:

  • 这对我来说毫无意义。如果我在这里离开基地,任何人都请纠正我。我通常使用存根来创建被测试的函数/方法使用的假函数/方法,以便为正在测试的函数/方法创建可预测的场景。我从来没有测试过存根方法的返回值,因为(假设我强制我的存根方法返回一个值)我知道那个值已经是什么了。将值分配给对象属性只是为了转身和测试它更没有意义。也许我误解了你的问题。如果是这样,请详细说明。
  • 所以,这里的上下文可能太少了。我正在做的是制作一个跨平台的 npm 模块,它必须在不同的操作系统上以不同的方式运行,因此我必须存根/伪造我在哪个操作系统上。我必须存根process.platform,我相信我不能通过简单地覆盖它来改变它。
  • 当然可以。我会把它作为我的答案发布。
  • @Cort3z 您的示例代码应该引用process.platform 而不是global.generated_object。始终显示真实代码。
  • @naomik:现在更新问题 :) 感谢您的反馈

标签: node.js mocking sinon stub


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    详情请发邮件至https://sinonjs.org/releases/latest/stubs/

    【讨论】:

      猜你喜欢
      • 2020-10-21
      • 2021-09-19
      • 2019-09-30
      • 2019-01-11
      • 1970-01-01
      • 2023-02-22
      • 2018-08-28
      • 2020-03-17
      相关资源
      最近更新 更多