Sinon.place vs sinon.stub只是为了替换返回值吗? [英] sinon.replace vs sinon.stub just to replace return value?

查看:16
本文介绍了Sinon.place vs sinon.stub只是为了替换返回值吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在使用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.place(对象,属性,替换);

用替换参数替换对象上的属性。试图 替换已替换的值会导致异常。

替换可以是任何值,包括间谍、存根和假货。

例如:

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

这篇关于Sinon.place vs sinon.stub只是为了替换返回值吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆