首先,我试图第二次测试被调用的函数返回正确的值。更具体地说,我正在尝试第二次测试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)
}
}
但我认为这是一种hacky方式,是否有任何标准/智能方法(如果可能使用sinon)?
答案 0 :(得分:1)
你不想监视on
- 在你设置监听器时只调用一次。 (除非你真的想窥探听众是否正在设置,并且不关心他们是否真的被使用过。这似乎不是你想要的。)
相反,您希望监视cb
回调函数,以查看它是否以及如何运行。
var callbackSpy = sinon.spy(cb);
然后,将该间谍作为回调传递:
socketio.on(eventName, callbackSpy);
并测试回调是否使用所需的参数值运行:
assert(callbackSpy.calledWith(something));