如何在节点中测试事件发射器

时间:2014-11-30 01:19:30

标签: javascript node.js mocha chai

让我们说我想写这个简单的任务。但我想写一个测试验证:

  1. 此任务会发出对象。
  2. 对象具有属性名称。
  3. 我正在测试mocha和chai期待。

    提前致谢。我已经尝试了所有可能出现的变体,但无法提出解决方案。

    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;
    

1 个答案:

答案 0 :(得分:31)

这是一个使用间谍的例子。 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');
    })
  })
})