簡體   English   中英

sinon.js存根 - 你可以在單個存根函數上調用多個回調嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM