如何在Karma的监视模式下测试Socket.IO Client?

时间:2015-02-05 20:07:32

标签: javascript socket.io jasmine karma-runner

我认为我需要做的是在每次测试后使用socket.io完全重置Socket.io。

有什么想法吗?这就是我正在做的事情:

我使用Socket.IO的客户端库,角度服务(github.com/chrisenytc/ng-socket),requireJS和本地测试服务器进行测试。使用karma的监视功能时,它第一次运行正常,但后续尝试失败(事件监听器未被触发,调试日志记录显示' xhr轮询错误')。

测试的简单版本是(full version):

define(['services/serviceModule', 'angular-mocks'], function() {
  describe('ILC Server Services', function() {

    var socket;

    beforeEach(module('ignisLibriColloqui.services', function(Config, $socketProvider) {
      $socketProvider.setUrl(Config.ilcTestServerUrl);
      Config.ilcServerUrl = Config.ilcTestServerUrl;
      url = Config.ilcTestServerUrl;
    }));
    beforeEach(inject(function(ILCServerService, $socket) {
      ilcServerService = ILCServerService;
      socket = $socket;
    }));

    it('expects emit(\'ping\') to trigger on(\'pong\')', function(done) {
      socket.emit('ping',{})
      socket.on('pong',function(data) {
        done();
      });
    });
  });
});

,简单服务器是(full version

var httpPort = 10999;
var socketPort = 5001;

var restify = require('restify');
var socketio = require('socket.io')(socketPort);
var fs = require('fs');

var server = restify.createServer({
  name: 'ilcServer Mock'
});

var io = socketio.listen(server);

server.get(/.*/, restify.serveStatic({
  'directory': __dirname,
  'default': './app/index.html',
  'maxAge': 0
}));

io.sockets.on('connection', function(socket) {
  var socketId = socket.id;
  console.log('user connected');
  socket.on('ping', function(data) {
    console.log('ping');
    socket.emit('pong', data);
  });
  socket.on('disconnect',function() {
    console.log('disconnect');
    socket.disconnect();
  });
});

server.listen(httpPort, function() {
  console.log('restify server listening at %s', server.url, 'socket port:', socketPort);
});

修改

在使用logging described by the Socket.io docs仔细探索连接后,我很清楚断开客户端是不够的。客户登录" pong"未触发socket.on('pong',event)的事件,即使使用afterEach导致socket.disconnect()socket.io.connect(function(){done()})触发,也不会触发对socket.emit的新调用。

0 个答案:

没有答案