Javascript 如何在Karma';什么是手表模式?

Javascript 如何在Karma';什么是手表模式?,javascript,socket.io,jasmine,karma-runner,Javascript,Socket.io,Jasmine,Karma Runner,我想我需要做的是在每次使用Socket.io进行测试之后完全重置Socket.io 有什么想法吗?以下是我正在做的: 我使用Socket.IO的客户端库、angular服务(github.com/chrisenytc/ngsocket)、requireJS和本地测试服务器进行了测试。使用karma的watch功能时,第一次运行正常,但后续尝试失败(未触发事件侦听器,调试日志显示“xhr轮询错误”) 测试的简单版本是(): 简单的服务器是() 编辑 在使用仔细研究了连接之后,我清楚地认识到,仅断开

我想我需要做的是在每次使用Socket.io进行测试之后完全重置Socket.io

有什么想法吗?以下是我正在做的:

我使用Socket.IO的客户端库、angular服务(github.com/chrisenytc/ngsocket)、requireJS和本地测试服务器进行了测试。使用karma的watch功能时,第一次运行正常,但后续尝试失败(未触发事件侦听器,调试日志显示“xhr轮询错误”)

测试的简单版本是():

简单的服务器是()

编辑


在使用仔细研究了连接之后,我清楚地认识到,仅断开客户端连接是不够的。客户端记录“pong”事件而不触发
套接字。在('pong',event)
上,即使使用afterEach导致
socket.disconnect()
socket.io.connect(function(){done()})
要触发,对
socket.emit
的新调用也不会触发。

在运行之间,套接字似乎正在关闭,但这种联系并没有被重新建立。服务器或客户端是否在任何时候都会出现
断开连接
重新连接
消息?如果是这样的话,它可能像等待重新连接一样简单。否则,我恐怕要说的是,ngSocket不支持重新初始化连接,这是我知道的唯一其他方法。您可以从添加一个连接插座开始,在连接插座时断开连接。您可能还应该对添加的套接字事件进行更多清理。@kevin.groat是的,客户端断开连接,我不确定测试中是否存在这种情况,但我确实在客户端中有一个功能性的disconnect->reconnect循环,但测试失败。@jornare套接字事件在服务中被销毁。简单地断开/重新连接客户端并不能解决问题。
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();
      });
    });
  });
});
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);
});