如何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立监听器的时候,只能调用一次。 (除非你真的想要窥探听众是否被设置,不关心他们是否被实际使用,这似乎并不是你想要的。
相反,你想监视cb
callback函数,看看它是否以及如何运行。
var callbackSpy = sinon.spy(cb);
然后,作为callback传递这个间谍:
socketio.on(eventName, callbackSpy);
并testingcallback曾经运行所需的参数值:
assert(callbackSpy.calledWith(something));