Javascript 如何编写测试websocket事件的代码?

Javascript 如何编写测试websocket事件的代码?,javascript,websocket,mocha.js,assert,feathersjs,Javascript,Websocket,Mocha.js,Assert,Feathersjs,我正在尝试测试在触发websocket事件后是否将数据添加到数据库中 在我正在使用的应用程序中,已经有一个这样的工作示例 it('some test name', function (done) { this.timeout(12000) var socket = io.connect('http://localhost:3000', { 'transports': [ 'websocket', 'flashsocket',

我正在尝试测试在触发websocket事件后是否将数据添加到数据库中

在我正在使用的应用程序中,已经有一个这样的工作示例

it('some test name', function (done) {
    this.timeout(12000)

    var socket = io.connect('http://localhost:3000', {
      'transports': [
        'websocket',
        'flashsocket',
        'jsonp-polling',
        'xhr-polling',
        'htmlfile'
      ]
    })

    socket.emit('some-room-event', {
      participant: 'p1',
      room: 12,
      active: true
    })

    setTimeout(function () {
      app.service('rooms').get(12)
         .then(function (room) {
           assert(room.active === true)
           socket.disconnect()
           done()
         }).catch(function (err) {
           socket.disconnect()
           done(err)
         })
    }, 11000)
  })
我来自一个ruby的背景,并且正在进入这个项目,所以我是一个新手。这感觉有点像使用超时是一种代码味道,只是感觉不对。您不希望将运行测试所需的持续时间增加任意的等待时间

我已经读了很多关于这方面的文章,但它相当混乱。有没有更好的方法来构造此代码并潜在地消除setTimeout


我使用的是feathersjs、摩卡和assert

看起来正在测试的事件只是对
rooms
服务起作用的普通websocket事件

测试中的任意超时肯定不是解决websocket事件在完成其本应完成的操作时无法确认的问题的最佳方法。我认为您可以做的是在房间
更新
修补
(尽管套接字事件不仅仅使用官方的
socket.emit('rooms::update',data)
来更新房间状态,这有点奇怪):


是的,我也觉得不对。当你是新手时,很难说服男人。谢谢,我不怀疑。但这并不意味着你错了。希望来自框架作者之一的输入有助于支持您:)
it('some test name', function (done) {
  var socket = io.connect('http://localhost:3000', {
    'transports': [
      'websocket',
      'flashsocket',
      'jsonp-polling',
      'xhr-polling',
      'htmlfile'
    ]
  });

  app.service('rooms').once('updated', function(room) {
    assert(room.active);
    done();
  });

  socket.emit('some-room-event', {
    participant: 'p1',
    room: 12,
    active: true
  });
});