首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试使用socket.io调用的sinon.spy事件

问如何测试使用socket.io调用的sinon.spy事件
EN

Stack Overflow用户
提问于 2017-09-13 18:46:30
回答 1查看 728关注 0票数 1

首先,我正在尝试第二次测试被调用的函数返回正确的值。更确切地说,我正在尝试测试socket.on()第二次接收事件时返回正确的值。

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

我试着测试,例如,

代码语言:javascript
复制
var socketio = io.connect(someUrl);
socketio.on(eventName, cb);

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

代码语言:javascript
复制
var spy = sinon.spy(socketio, 'on');
assert(spy.withArgs(eventName).called);

但它说它永远不会被调用。

此外,如果我想测试回调函数中的数据是否正确,例如

代码语言:javascript
复制
var socketio = io.connect(someUrl);
socketio.on(eventName, function(data) {
    data.should.equal(something);
});

能测试一下吗?

更新:

我通过在回调中添加一个计数来解决这个问题。

代码语言:javascript
复制
var count = 0;
socketio.on(eventName, function(data) {
    count++;
    if(count === 2) {
        data.should.equal(something)
    }
}

但我认为这是一种讨厌的方式,是否有任何标准/明智的方式来做它(如果可能的话,使用sinon)?

EN

回答 1

Stack Overflow用户

发布于 2017-11-14 19:50:20

你不想监视on --在你设置侦听器的时候,这只被称为一次。(除非你真的想窥探侦听器是否被设置好,而不管它们是否被实际使用。这似乎不是你想要的。)

相反,您希望监视cb回调函数,查看它是否运行以及如何运行。

代码语言:javascript
复制
var callbackSpy = sinon.spy(cb);

然后,把那个间谍传进来,作为回击:

代码语言:javascript
复制
socketio.on(eventName, callbackSpy);

并测试是否使用所需的参数值运行回调:

代码语言:javascript
复制
assert(callbackSpy.calledWith(something));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46204810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档