2016-11-29 14 views
0

У меня есть простой паб/к югу с помощью RedisКак заглушить Redis подписаться на канал, используя Sinonjs?

const sub = redis.createClient() 
sub.subscribe('my_channel') 

// I would like to stub this on event, so I can pass an object to the msg argument 
sub.on('message', (channel, msg) => { 
    //parse the msg object 
}) 

Могу ли я знать, как я могу окурок обратного вызова sub.on событий с помощью Sinonjs, так что я мог передать объект (как показано ниже) к msg аргумента

{ 
    "name":"testing" 
} 

ответ

0

Используйте 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 
}) 
+0

хорошее объяснение, но я все еще не могу понять, как заглушить redis callback – Tim

+0

просто обновите ответ. –