谁能为Node提供一个坚如磐石、极其简单的单元测试呢.js使用WebSocket(Socket.io)?

我用的是插座. node 的io.js,并查看了套接字.io客户端,用于建立与测试中服务器的客户端连接.然而,我似乎错过了一些东西.

在下面的例子中,"工作……"永远不会被打印出来.

var io = require('socket.io-client')
, assert = require('assert')
, expect = require('expect.js');

describe('Suite of unit tests', function() {

    describe('First (hopefully useful) test', function() {

        var socket = io.connect('http://localhost:3001');
        socket.on('connect', function(done) {
            console.log('worked...');
            done();
        });

        it('Doing some things with indexOf()', function() {
            expect([1, 2, 3].indexOf(5)).to.be.equal(-1);
            expect([1, 2, 3].indexOf(0)).to.be.equal(-1);
        });

    });
});

相反,我只是得到:

  Suite of unit tests
    First (hopefully useful) test
      ✓ Doing some things with indexOf() 


  1 test complete (26 ms)

有什么建议吗?

推荐答案

自己处理回电和promise 可能会很困难,而非琐碎的例子很快就会变得非常复杂,难以阅读.

NPM提供了一个名为socket.io-await-test的工具,允许您暂停/等待测试,直到使用wait关键字触发事件.

  describe("wait for tests", () => {
    it("resolves when a number of events are received", async () => {
        const tester = new SocketTester(client);
        const pongs = tester.on('pong');
        
        client.emit('ping', 1);
        client.emit('ping', 2);
        await pongs.waitForEvents(2) // Blocks until the server emits "pong" twice. 

        assert.equal(pongs.get(0), 2)
        assert.equal(pongs.get(1), 3)
    })
})

Node.js相关问答推荐

为什么我的表单数据在我的POST请求中作为应用程序/json发送,为什么它返回错误请求错误?

如何将Node.js与Nuxt.js一起使用?

FireStore事务似乎已允许并发编辑?

用于SLACK命令返回json而不是文本的AWS lambda函数

JEST模拟由http服务器控制器导入的ES模块

AWS-ROUTE 53指向S3存储桶,错误是别名目标名称不在目标区域内

如何在nodejs中打印pdf

如何使用包含条件正确分页的 sequelize 查询?

找不到模块bcryptjs

Typescript 条件语句不过滤值?

module.exports=require('other') 和临时变量有什么区别?

为什么 $or 在带有正则表达式的mongoose 中不能正常工作

带有事件网格的 Azure 函数在没有 ngrok 的情况下在本地运行

NestJS TypeORM 可选查询不起作用

如何使用 UglifyJS 缩小文件夹中的多个 Javascript 文件?

在 Node.js 中的两个不同进程之间进行通信

如何监控 node.js 上的网络,类似于 chrome/firefox 开发者工具?

如何在离线时安装 npm 包?

安装Node.js 安装n 安装Node.js?

使用 Node-sass 缩小 CSS