首先,我正在尝试第二次测试被调用的函数返回正确的值。更确切地说,我正在尝试测试socket.on()第二次接收事件时返回正确的值。
我知道Sinon.spy()可以检测函数是否被调用。但它似乎不适用于socket.io事件。
我试着测试,例如,
var socketio = io.connect(someUrl);
socketio.on(eventName, cb);如果调用'eventName‘。我试过了
var spy = sinon.spy(socketio, 'on');
assert(spy.withArgs(eventName).called);但它说它永远不会被调用。
此外,如果我想测试回调函数中的数据是否正确,例如
var socketio = io.connect(someUrl);
socketio.on(eventName, function(data) {
data.should.equal(something);
});能测试一下吗?
更新:
我通过在回调中添加一个计数来解决这个问题。
var count = 0;
socketio.on(eventName, function(data) {
count++;
if(count === 2) {
data.should.equal(something)
}
}但我认为这是一种讨厌的方式,是否有任何标准/明智的方式来做它(如果可能的话,使用sinon)?
发布于 2017-11-14 19:50:20
你不想监视on --在你设置侦听器的时候,这只被称为一次。(除非你真的想窥探侦听器是否被设置好,而不管它们是否被实际使用。这似乎不是你想要的。)
相反,您希望监视cb回调函数,查看它是否运行以及如何运行。
var callbackSpy = sinon.spy(cb);然后,把那个间谍传进来,作为回击:
socketio.on(eventName, callbackSpy);并测试是否使用所需的参数值运行回调:
assert(callbackSpy.calledWith(something));https://stackoverflow.com/questions/46204810
复制相似问题