Используйте 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
не будет отображаться во втором вызове.
[Редактировать]
Поскольку я не в той же среде, я издеваться код 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
})
хорошее объяснение, но я все еще не могу понять, как заглушить redis callback – Tim
просто обновите ответ. –