2017-05-24 88 views
0

我正在尝试测试事件筛选器,但是存在一个我不确定如何解决的计时问题。除了在setTimeout中包装REST请求之外,我怎么能得到这个工作?如何知道羽毛客户端何时连接到服务

const app = require('../../src/app'); 

const feathers = require('feathers/client') 
const socketio = require('feathers-socketio/client'); 
const hooks = require('feathers-hooks'); 
const io = require('socket.io-client'); 

const rp = require('request-promise'); 

const service = app.service('users'); 

let server = null; 

describe('\'users\' service',() => { 
    beforeEach((done) => { 
    server = app.listen('3030'); 
    server.once('listening', done); 
    }); 

    afterEach((done) => { 
    server.close(done); 
    }); 

    it('returns stuff #test', (done) => { 
    const socket = io('http://localhost:3030'); 
    const app = feathers() 
     .configure(hooks()) 
     .configure(socketio(socket)); 

    const messageService = app.service('users'); 
    messageService.on('created', message => { 
     console.log('Created a message', message); 
     done(); 
    }); 

    socket.on('connection',() => { 
     // 
     // The messageService is not connected yet 
     // so messages.filters.js will not fire 
     // 
     // Giving it a chance to connect with setTimeout does work... 
     //   setTimeout(() => { 
     rp({ 
      method: 'POST', 
      url: 'http://localhost:3030/users', 
      body: { 
      test: 'Message from REST' 
      }, 
      json: true 
     }); 
     //   }, 500); 
    }); 

    }); 
}); 

我曾尝试更换socket.on这些还有:

  • messageService.on('connection'
  • service.on('connection'(基于Node.js的EventEmitter)
  • 等等...

编辑

我自那时以来发现service.on('newListener'工作,但它被触发很多次。我需要追踪单个连接:

const messageService = app.service('users'); 
messageService.on('created', message => { 
    console.log('Created a message', message); 
    done(); 
}); 

回答

0

这简直就是service.on('newListener'。为“器newListener”事件注册

https://nodejs.org/api/events.html#events_event_newlistener

听众将被传递的事件名称和到听众的引用被添加。

但是,当我实现这个时,我发现它正在监听5个不同的事件。所以,你需要将它们过滤掉:

service.on('newListener', (event, listener) => { 
    if (event === 'created') { 
    rp({ 
     method: 'POST', 
     url: 'http://localhost:3030/users', 
     body: { 
     test: 'Message from REST' 
     }, 
     json: true 
    }); 
    } 
}); 
相关问题