What's the best way to unit test an event being emitted in Nodejs?

manalang picture manalang · May 30, 2013 · Viewed 28.9k times · Source

I'm writing a bunch of mocha tests and I'd like to test that particular events are emitted. Currently, I'm doing this:

  it('should emit an some_event', function(done){
    myObj.on('some_event',function(){
      assert(true);
      done();
    });
  });

However, if the event never emits, it crashes the test suite rather than failing that one test.

What's the best way to test this?

Answer

Bret Copeland picture Bret Copeland · May 30, 2013

If you can guarantee that the event should fire within a certain amount of time, then simply set a timeout.

it('should emit an some_event', function(done){
  this.timeout(1000); //timeout with an error if done() isn't called within one second

  myObj.on('some_event',function(){
    // perform any other assertions you want here
    done();
  });

  // execute some code which should trigger 'some_event' on myObj
});

If you can't guarantee when the event will fire, then it might not be a good candidate for unit testing.