首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >sinon.js存根-可以对单个存根函数调用多个回调吗?

sinon.js存根-可以对单个存根函数调用多个回调吗?
EN

Stack Overflow用户
提问于 2015-04-23 09:11:28
回答 2查看 2.5K关注 0票数 11

如果我有一个接受2个回调的函数的存根,那么当调用存根函数时,如何将sinon.js连接到调用两个回调

例如,下面是我想要存根的函数,它接受两个函数作为参数:

代码语言:javascript
代码运行次数:0
运行
复制
function stubThisThing(one, two) {
   ... one and two are functions ...
   ... contents stubbed by sinon.js ...
}

我可以用sinon调用任何一个论点

代码语言:javascript
代码运行次数:0
运行
复制
stubbedThing.callsArg(0);

代码语言:javascript
代码运行次数:0
运行
复制
stubbedThing.callsArg(1);

但我似乎不能让他们都给我打电话。如果我试着:

代码语言:javascript
代码运行次数:0
运行
复制
stubbedThing.callsArg(0).callsArg(1);

代码语言:javascript
代码运行次数:0
运行
复制
stubbedThing.callsArg(0);
stubbedThing.callsArg(1);

那么,西农只会提出第二个论点。如果我把它按另一个顺序连接起来,那么西农就会叫第一个阿格。不过,我两个人都想一个接一个地被打电话。

EN

回答 2

Stack Overflow用户

发布于 2015-05-02 18:17:01

这不是一个经典的场景,因为没有很多方法会顺序地调用两个方法,我想这就是为什么不支持它。但是,冷静点,解决办法很简单:

代码语言:javascript
代码运行次数:0
运行
复制
var subject = { 
    method: function(one, two) {} 
};

var stub = sinon.stub(subject, 'method', function(one, two) { 
    one(); 
    two(); 
});

subject.method(
    function() { console.log('callback 1'); }, 
    function() { console.log('callback 2'); });

附带注意:这也提供了选择一个或两个应该首先调用的选项。

票数 7
EN

Stack Overflow用户

发布于 2015-05-02 17:55:05

你为什么不干脆跳过西农呢?

代码语言:javascript
代码运行次数:0
运行
复制
var obj = { stubMe: function(cb1, cb2) {} };
var originalMethod = obj.stubMe;

obj.stubMe = function(cv1, cb2) { 
  //Whatever logic you wish
  cb1(); 
  cb2(); 
}; 

//Do your test

obj.stubMe = originalMethod; //Restore

这样,您甚至可以继续使用sinon的API,如果您愿意的话:

代码语言:javascript
代码运行次数:0
运行
复制
var stub = sinon.stub();
obj.stubMe = function(cb1, cb2) { 
  stub.apply(stub, arguments);
  //Rest of whatever logic you wanted here
};

obj.stubMe();
expect(stub.calledOnce()).to.be(true); //That would pass

你怎么想的?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29818811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档