[英]sinon.js stub - can you call more than one callback on a single stubbed function?
如果我有一個帶有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。 但是,我希望兩者一個接一個地被召喚。
這不是一個經典的場景,因為沒有多少方法可以順序調用兩個方法,我猜這就是為什么它不受支持。 但是,要保持冷靜,解決方案很簡單:
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'); });
附注:這也提供了選擇是否應首先調用一個或兩個的選項。
你為什么不完全跳過sinon?
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
你覺得怎么樣?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.