测试一个 Socket.io 应用程序,其中有两个连接交互

Testing a Socket.io app, in which two connections interact

我对 NodeJS 的单元测试很陌生,现在我想使用 Mocha 测试一个 socket.io 服务器,该应用程序涉及 2 个套接字的交互,规范如下

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

describe("Server", function() {
    var options = {
        transports: ['websocket'],
        'force new connection': true
    };

    var socketOne;
    var socketTwo;

    it("Should do stuff", function(done) {

        socketOne = io.connect("http://localhost:3000");

        socketOne.on("connect", function(data) {
            socketTwo = io.connect("http://localhost:3000");

            socketTwo.on("connect", function(data) {
                console.log("hellow world");

            });
        });

        socketOne.on("connection", function(x) {
            console.log(x);
            done();
        });
    });

});

到目前为止,我只想测试创建两个套接字连接,但是当我 运行 它时,似乎只有 "socketOne" 连接到服务器, socketTwo.on ("connection") 没有被调用。你知道我做错了什么吗?

socket.io 客户端将回收(多路复用)任何现有连接,这就是为什么您的第二个连接没有触发连接事件。为防止这种情况,您可以通过在连接选项中指定 {multiplex: false} 来禁用多路复用。像这样:

socketOne = io.connect("http://localhost:3000");

socketOne.on("connect", function(data) {
    socketTwo = io.connect("http://localhost:3000", {multiplex: false});

    socketTwo.on("connect", function(data) {
        console.log("hellow world");

    });
});