2014-11-30 13 views
19

Powiedzmy, że chcę napisać to proste zadanie. Ale chcę napisać test potwierdzający:Jak przetestować emitery zdarzeń w węźle

  1. To zadanie emituje obiekt.
  2. Obiekt ma nazwę właściwości.

Testuję z mocha i Chai oczekiwać.

Z góry dziękuję. Próbowałem już wszystkich możliwych wariantów, ale nie mogłem znaleźć rozwiązania.

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; 

Odpowiedz

24

Oto przykład użycia szpiegów. 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

Taks! Pomógł dużo !!! – datogio

+0

Jak mogę emitować podczas testu dwa zdarzenia dla 'SUT' w wymaganej kolejności, tj.' On ('data') 'and' on ('end') '? – hellboy