Après plus de piquer et à les pousser, j'ai trouvé quelques incroyablement informations utiles à http://blog.foundry376.com/2012/09/connecting-to-a-socket-io-server-from-node-js-unit-tests. Pour l'auteur, exemple, il souligne l'étape critique de l'établissement de prise écouteurs dans le "avant*" crochets. Cet exemple fonctionne (en supposant que le serveur est à l'écoute pour les connexions socket à localhost:3001, bien sûr)
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();
});
});
});
J'ai trouvé que le placement de fait() dans le beforeEach, socket.sur('connect'...) auditeur est essentiel pour avoir la connexion s'établir. Par exemple, si vous commentez done() dans l'écouteur, puis ajouter une portée (juste avant de sortir de la beforeEach), vous verrez le "pas de connexion à la pause..." message au lieu de le "débrancher..." message. Comme suit:
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();
});
Je suis nouveau à Moka, donc il n'y a probablement une raison évidente de l'initié pour la mise done() withiin la prise de la portée elle-même. Espérons que ce petit détail va sauver les autres dans mes chaussures de tirer les cheveux.
Pour moi, le test ci-dessus (avec la bonne portée de fait()) sorties:
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)