我正在使用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");
答案 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/进行检查