【问题标题】:sinon.js stub - can you call more than one callback on a single stubbed function?sinon.js 存根——你能在一个存根函数上调用多个回调吗?
【发布时间】:2015-07-01 08:45:44
【问题描述】:

如果我有一个需要 2 个回调的函数的存根,我如何连接 sinon.js 以在调用存根函数时调用两个回调

例如 - 这是我想要存根的函数,它需要 2 个函数作为参数:

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);

那么 sinon 只会调用第二个参数。如果我按其他顺序连接它,那么 sinon 将调用第一个 arg。但是,我希望两者都被一个接一个地调用。

【问题讨论】:

  • 你检查过calledWith方法
  • @Pawan - 你是指来自间谍 API 的 calledWith 函数吗?这真的不是我要找的。我想改变存根的行为。
  • sinon.js 仅支持每次调用每个存根最多调用一个回调。它可以在多个调用中调用多个回调,例如。 stubbedThing.onCall(0).callsArg(0); stubbedThing.onCall(1).callsArg(1);。或者您可以在调用 stubbedThing 后手动 callArg:例如stubbedThing(firstArg, secondArg); stubbedThing.callArg(0); //calls firstArgs; stubbedThing.callArg(1) // calls secondArg
  • @serg10:你为什么不把这个问题放在他们的 github 上作为一个问题,可能他们会想出一些东西..

标签: javascript stub sinon


【解决方案1】:

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

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'); });

旁注:这也提供了选择是先调用一个还是两个。

【讨论】:

  • 感谢@ChristianKuetbach。该网址已被劫持。由于我不再拥有该文件,因此我将其删除。
【解决方案2】:

你为什么不完全跳过诗乃?

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

你觉得怎么样?

【讨论】:

  • 赌注建议:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 2021-02-04
  • 2016-09-17
  • 2015-05-29
  • 2016-12-02
  • 2012-09-30
相关资源
最近更新 更多