gpt4 book ai didi

javascript - sinon.replace vs sinon.stub 只是为了替换返回值?

转载 作者:行者123 更新时间:2023-11-28 17:11:23 28 4
gpt4 key购买 nike

当使用 sinon 时,我只想替换函数的返回值,不需要其他信息,例如调用了多少次。哪一个更好?

sinon.replace(Component.prototype, 'getValue', () => 123);
const myStub = sinon.stub(Component.prototype, 'getValue');
myStub.return(123);

最佳答案

我很少看到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(object, property, replacement);

Replaces property on object with replacement argument. Attempts to replace an already replaced value cause an exception.

replacement can be any value, including spies, stubs and fakes.

例如:

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

通过用 stub 替换函数,您可能可以使用 sinon.replace 实现与 stub 相同的功能

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

关于javascript - sinon.replace vs sinon.stub 只是为了替换返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54283946/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com