これを達成するにはcallsArgWith
を使用してください。
// a mock callback function with same arguments channel and msg
var cb = function (channel, msg){
console.log("this "+ channel + " is " + msg.name + ".");
}
// a mock sub object with same member function on
var sub = {
on: function(event_name, cb){ console.log("on " + event_name) },
};
// FIRST: call the mock function
sub.on("message", cb("channel", {"name":"not stub"}));
// -----------------------------------------
// prepare mock arguments
var my_msg = {"name":"stub"}
// stub object
var subStub = sub;
sinon.stub(subStub);
// passing mock arguments into the member function of stub object
subStub.on.callsArgWith(1, 'channel', my_msg);
// SECOND: call the stub function
sub.on('message', cb);
結果
this channel is not stub.
on message
this channel is stub.
注:オブジェクトはスタブとなっているので、これon message
は、2番目の呼び出しでは表示されません。
[編集]私は同じ環境を持っていないので、私はあなたのコードで上記のケースを使用する必要がある場合、あなたはこれを試すことができ、Redisの関連のコードを模擬
。
const sub = redis.createClient()
sub.subscribe('my_channel')
var subStub = sub;
sinon.stub(subStub);
subStub.on.callsArgWith(1, 'my_channel', {"name":"testing"});
sub.on('message', (channel, msg) => {
//parse the msg object
})
いいえexplaination、しかし私はまだそれは赤いコールバックをスタブする方法を理解することができません – Tim
ちょうど答えを更新します。 –