После дальнейших выталкиваний и подталкивания я нашел невероятно полезную информацию по адресу http://blog.foundry376.com/2012/09/connecting-to-a-socket-io-server-from-node-js-unit-tests. В примере автора он указывает на критический шаг установки сокет-слушателей в «до *» крючках. Этот пример работает (предполагая, что сервер прослушивает соединения сокета на локальном хосте: 3001, конечно)
var io = require('socket.io-client')
, assert = require('assert')
, expect = require('expect.js');
describe('Suite of unit tests', function() {
var socket;
beforeEach(function(done) {
// Setup
socket = io.connect('http://localhost:3001', {
'reconnection delay' : 0
, 'reopen delay' : 0
, 'force new connection' : true
});
socket.on('connect', function() {
console.log('worked...');
done();
});
socket.on('disconnect', function() {
console.log('disconnected...');
})
});
afterEach(function(done) {
// Cleanup
if(socket.connected) {
console.log('disconnecting...');
socket.disconnect();
} else {
// There will not be a connection unless you have done() in beforeEach, socket.on('connect'...)
console.log('no connection to break...');
}
done();
});
describe('First (hopefully useful) test', function() {
it('Doing some things with indexOf()', function(done) {
expect([1, 2, 3].indexOf(5)).to.be.equal(-1);
expect([1, 2, 3].indexOf(0)).to.be.equal(-1);
done();
});
it('Doing something else with indexOf()', function(done) {
expect([1, 2, 3].indexOf(5)).to.be.equal(-1);
expect([1, 2, 3].indexOf(0)).to.be.equal(-1);
done();
});
});
});
Я обнаружил, что размещение сделано() в beforeEach, socket.on («Connect» ...) слушатель имел решающее значение для установления связи. Например, если вы закомментируете done() в прослушивателе, добавьте его в одну область (непосредственно перед тем, как выйти из beforeEach), вы увидите сообщение «no connection to break ...» вместо «отключение». . ". Как так:
beforeEach(function(done) {
// Setup
socket = io.connect('http://localhost:3001', {
'reconnection delay' : 0
, 'reopen delay' : 0
, 'force new connection' : true
});
socket.on('connect', function() {
console.log('worked...');
//done();
});
socket.on('disconnect', function() {
console.log('disconnected...');
});
done();
});
Я новичок в Mocha, так что, вероятно, очень очевидная причина посвящённый для размещения сделали() withiin самого гнезда рамки. Надеюсь, эта маленькая деталь спасет других в моих ботинках от притягивания волос.
Для меня выше тест (при правильном определении объема проделанных()) выходы:
Suite of unit tests
First (hopefully useful) test
◦ Doing some things with indexOf(): worked...
✓ Doing some things with indexOf()
disconnecting...
disconnected...
◦ Doing something else with indexOf(): worked...
✓ Doing something else with indexOf()
disconnecting...
disconnected...
2 tests complete (93 ms)
Этот тест мокко или жасмина? Для асинхронных тестов мокко (что это такое) ваша тестовая функция должна принимать функцию обратного вызова (testDone), поэтому мокко знает, как правильно ее обрабатывать. На самом деле это может работать, но мокка выходит, прежде чем произойдет событие «connect», потому что мокко не знает, что он должен ждать. –