使用sinon时,我只想替换函数的返回值,而不需要其他信息(例如调用了多少次)。其中哪一个更好?
sinon.replace(Component.prototype, 'getValue', () => 123);
const myStub = sinon.stub(Component.prototype, 'getValue');
myStub.return(123);
答案 0 :(得分:0)
我很少看到sinon.replace
被用于许多项目中。使用stub
的好处是您可以多次修改返回值。
let getValueStub;
before(function() {
getValueStub = sinon.stub(Component.prototype, 'getValue');
})
after(function() {
sinon.restore();
})
it('test case A if return value is 123', function() {
getValueStub.returns(123);
// do expectation
})
it('test case B if return value is 234', function() {
getValueStub.returns(234);
// do expectation
})
同时,对于replace
,基于Sinon文档,您只能使用一次。
sandbox.replace(对象,属性,替换);
使用替换参数替换对象上的属性。尝试去 替换已经替换的值会导致异常。
替换值可以是任何值,包括间谍,存根和假货。
例如:
sinon.replace(Component.prototype, 'getValue', function () {
return 123;
});
sinon.replace(Component.prototype, 'getValue', function () { // this will return error
return 456;
});
它将返回错误
TypeError: Attempted to replace getValue which is already replaced
通过将功能替换为存根,您可能可以通过sinon.replace
实现与存根相同的功能
getValueStub = sinon.stub();
sinon.replace(Component.prototype, 'getValue', getValueStub);
getValueStub.returns(123);
getValueStub.returns(456);
不过,由于简单,我更喜欢使用sinon.stub
。
参考:
https://sinonjs.org/releases/v7.2.2/sandbox/#sandboxreplaceobject-property-replacement