2014-11-30 12 views
19

Diciamo che voglio scrivere questa semplice operazione. Ma voglio scrivere un test per convalidare che:Come testare gli emettitori di eventi nel nodo

  1. Questo task emette oggetto.
  2. L'oggetto ha un nome di proprietà.

Sto testando con moka e chai expect.

Grazie in anticipo. Ho provato ogni possibile variante che mi è venuta in mente, ma non sono riuscito a trovare una soluzione.

var util = require('util'), 
    EventEmitter = require('events').EventEmitter; 

function SomeTask() { 
    var self = this; 

    setInterval(function() { 
    self.emit('data', { name: 'name' }); 
    }, 5000); 
} 

util.inherits(SomeTask, EventEmitter); 

module.exports = SomeTask; 

risposta

24

Ecco un esempio utilizzando spie. https://github.com/mochajs/mocha/wiki/Spies

var sinon = require('sinon'); 
var EventEmitter = require('events').EventEmitter; 

describe('EventEmitter', function(){ 
    describe('#emit()', function(){ 
    it('should invoke the callback', function(){ 
     var spy = sinon.spy(); 
     var emitter = new EventEmitter; 

     emitter.on('foo', spy); 
     emitter.emit('foo'); 
     spy.called.should.equal.true; 
    }) 

    it('should pass arguments to the callbacks', function(){ 
     var spy = sinon.spy(); 
     var emitter = new EventEmitter; 

     emitter.on('foo', spy); 
     emitter.emit('foo', 'bar', 'baz'); 
     sinon.assert.calledOnce(spy); 
     sinon.assert.calledWith(spy, 'bar', 'baz'); 
    }) 
    }) 
}) 
+1

Tnaks !!! Aiutato molto !!! – datogio

+0

Come posso emettere in test due eventi per 'SUT' nell'ordine richiesto, ad esempio' on ('data') 'e' on ('end') '? – hellboy