2016-08-03 3 views
2

Попытка подключения Socket.io-клиента к серверу узла я получаю следующее сообщение об ошибке с помощью DEBUG = *Не удается подключиться Socket.io-клиент к серверу в тестировании мокко

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-клиент запускается из браузера, но не тестируется.

Может ли кто-нибудь дать мне подсказку, почему это происходит?

ответ

0

Поскольку вы тестируете, у вас, вероятно, есть global.window, определенный в среде nodejs. И this строка кода не ожидает его на всех

Вы должны либо удалить объект global.window или написать что-то вроде global.WebSocket = require('ws'); или удалить transports: ['websocket']

Смежные вопросы