web-dev-qa-db-ja.com

ノードでイベントエミッターをテストする方法

この単純なタスクを書きたいとしましょう。しかし、私はそれを検証するテストを書きたい:

  1. このタスクはオブジェクトを放出します。
  2. オブジェクトにはプロパティ名があります。

私はモカとチャイでテストしています。

前もって感謝します。私は思いついたすべての可能なバリアントを試しましたが、解決策を思い付くことができませんでした。

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;
25
datogio

スパイを使用した例を次に示します。 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');
    })
  })
})
32
Miguel Mota