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