如果我有一个接受2个回调的函数的存根,那么当调用存根函数时,如何将sinon.js连接到调用两个回调?
例如,下面是我想要存根的函数,它接受两个函数作为参数:
function stubThisThing(one, two) {
... one and two are functions ...
... contents stubbed by sinon.js ...
}
我可以用sinon调用任何一个论点
stubbedThing.callsArg(0);
或
stubbedThing.callsArg(1);
但我似乎不能让他们都给我打电话。如果我试着:
stubbedThing.callsArg(0).callsArg(1);
或
stubbedThing.callsArg(0);
stubbedThing.callsArg(1);
那么,西农只会提出第二个论点。如果我把它按另一个顺序连接起来,那么西农就会叫第一个阿格。不过,我两个人都想一个接一个地被打电话。
发布于 2015-05-02 10:17:01
这不是一个经典的场景,因为没有很多方法会顺序地调用两个方法,我想这就是为什么不支持它。但是,冷静点,解决办法很简单:
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'); });
附带注意:这也提供了选择一个或两个应该首先调用的选项。
发布于 2015-05-02 09:55:05
你为什么不干脆跳过西农呢?
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,如果您愿意的话:
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
你怎么想的?
https://stackoverflow.com/questions/29818811
复制