摩卡testing中无法将socket.io-client连接到服务器

试图连接socket.io客户端到节点服务器我得到以下错误使用DEBUG = *

mocha:runner run suite Chat Server Message Events +1ms Message Events socket.io-client:url parse http://localhost:5000 +1s socket.io-client ignoring socket cache for http://localhost:5000 +0ms socket.io-client:manager readyState closed +1ms socket.io-client:manager opening http://localhost:5000 +2ms engine.io-client:socket creating transport "websocket" +1ms engine.io-client:socket setting transport websocket +7ms socket.io-client:manager connect attempt will timeout after 20000 +1ms socket.io-client:manager readyState opening +1ms engine.io-client:socket socket error {"description": {"code":"ENOENT", "errno":"ENOENT", "syscall":"connect", "target":{"domain":null, "_events":{}, "_maxListeners":10, "_socket":null, "_ultron":null, "_closeReceived":false, "bytesReceived":0, "readyState":0, "supports":{"binary":true}, "extensions":{}, "_isServer":false, "url":"ws://localhost:5000/socket.io/?EIO=3&transport=websocket", "protocolVersion":13, "binaryType":"buffer"}}} +2ms 

当我在浏览器上使用socket.io-client时,这种情况不会发生,使用相同的套接字configuration。

这里是testing代码:

 var server = require('myServer'); var io = require('socket.io-client'); var url = 'http://localhost:5000'; var options = { transports: ['websocket'], 'force new connection': true }; var sender; describe("Server Test", function () { it('Should login user', function (done) { sender = io(url, options); }); }); 

这是服务器代码:

 var express = require('express'); var app = express(); var server = require('http').Server(app); var io = require('socket.io')(server); io.on('connection', function (socket) { console.log("connect"); }); server.listen(5000); 

服务器工作正常。 当scoket.io-client从浏览器运行但不在testing中时,它显示日志消息。

有人能给我一个线索为什么会发生这种情况?

由于您正在testing,您可能已经在nodejs环境中定义了global.window。 而这行代码根本不期望它

你应该删除global.window对象或写一些像global.WebSocket = require('ws'); 或移除transports: ['websocket']