node.js - 在 mocha 测试中无法将 socket.io-client 连接到服务器

标签 node.js testing socket.io mocha.js

尝试将 socket.io-client 连接到 Node 服务器时,使用 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 时,不会发生这种情况。

测试代码如下:

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 从浏览器运行但不在测试中时,它会显示日志消息。

有人能告诉我为什么会这样吗?

最佳答案

由于您正在测试,您可能在 nodejs 环境中定义了 global.window。和 this代码行根本不期望它

您应该删除 global.window 对象或编写类似 global.WebSocket = require('ws'); 或删除 transports: ['websocket']

关于node.js - 在 mocha 测试中无法将 socket.io-client 连接到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38753786/

相关文章:

node.js - nvm vs 海军vs n |包处理比较

testing - 谁能告诉我哪个是测试 abn web 应用程序的最佳方法

Angular5 - 测试调用内部http服务的函数

scala - 如何执行三重等于否定

python - 从 APScheduler 作业发送 python-socket.io 消息导致客户端挂起

javascript - Socket I - 它如何自动连接回服务器?

javascript - Socket.io,从客户端获得两个响应然后运行代码?

node.js - 用于在字段中创建未知数量项目的文档的 Mongoose 最佳实践

node.js - nodejs fs 文件系统返回空对象

javascript - gulp - 如何在管道中运行某些内容并让下一个管道等待?