如何testing用sinon.spy调用的socket.io事件

首先,我试图第二次testing被调用的函数返回正确的值。 更具体地说,我试图第二次testingsocket.on()返回正确的值。

我知道Sinon.spy()可以检测一个函数是否被调用。 但它似乎不适用于socket.io事件。

我试图testing例如,

var socketio = io.connect(someUrl); socketio.on(eventName, cb); 

如果'eventName'被调用。 我试过了

 var spy = sinon.spy(socketio, 'on'); assert(spy.withArgs(eventName).called); 

但它说,这是从来没有被称为。

此外,例如,如果我想在callback函数中testing数据是正确的还是不正确的

 var socketio = io.connect(someUrl); socketio.on(eventName, function(data) { data.should.equal(something); }); 

有没有可能testing?

更新:

我通过在callback中添加一个计数来解决问题

 var count = 0; socketio.on(eventName, function(data) { count++; if(count === 2) { data.should.equal(something) } } 

但是我认为这是一个很不方便的方法,有没有什么标准/明智的方法来做到这一点(如果可能的话,用sinon)?

你不想窥探 – 在你build立监听器的时候,只能调用一次。 (除非你真的想要窥探听众是否被设置,不关心他们是否被实际使用,这似乎并不是你想要的。

相反,你想监视cbcallback函数,看看它是否以及如何运行。

 var callbackSpy = sinon.spy(cb); 

然后,作为callback传递这个间谍:

 socketio.on(eventName, callbackSpy); 

并testingcallback曾经运行所需的参数值:

 assert(callbackSpy.calledWith(something));