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

Javascript 如何在节点中测试事件发射器,javascript,node.js,mocha.js,chai,Javascript,Node.js,Mocha.js,Chai,假设我想写这个简单的任务。但我想写一个测试来验证: 此任务发射对象 对象具有属性名称 我正在用摩卡和柴汁进行测试 提前谢谢。我已经尝试了脑海中出现的每一种可能的变体,但没有找到解决方案 var util = require('util'), EventEmitter = require('events').EventEmitter; function SomeTask() { var self = this; setInterval(function() { self

假设我想写这个简单的任务。但我想写一个测试来验证:

  • 此任务发射对象
  • 对象具有属性名称
  • 我正在用摩卡和柴汁进行测试

    提前谢谢。我已经尝试了脑海中出现的每一种可能的变体,但没有找到解决方案

    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;
    

    这里有一个使用间谍的例子


    我如何在测试中按要求的顺序发出
    SUT
    的两个事件,即
    on('data')
    on('end')
    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');
        })
      })
    })