node.js v0.12.x EventEmitter 的变化破坏了继承

node.js v0.12.x changes in EventEmitter ruins inheritance

在 node.js0.12.x 中有一些与事件模块相关的更改。 此更改使我的扩展 EventEmitter class 的代码无法运行。 这是在 node.js v0.10.35 中运行良好的代码: teh_emitter.js:

var EventEmitter = require('events');
var util = require('util');

util.inherits(TehEmitter, EventEmitter);


function TehEmitter(){

 EventEmitter.call(this);
}


TehEmitter.prototype.on('start', function (fCallback) {

 fCallback();
});

module.exports = TehEmitter;

test_teh_emitter.js:

var TehEmitter =  require('./teh_emitter');

describe('EventEmitter tests', function(){

 describe('#emit() function', function(){

  it('should fire start event', function(fCallback){

   var oEmitter = new TehEmitter(fCallback);

   oEmitter.emit('start', fCallback);

  });
 })
});

但是在 node.js v0.12.7 上它说: 0 传球(2 秒) 1 失败

1) EventEmitter tests #emit() function should fire start event:
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

我知道在 0.12.x 中应该分配: var EventEmitter = require('events'); (虽然 require('events').EventEmitter; 应该仍然适用于向后兼容)。 但这并没有帮助。

我该如何解决这个问题?

这已在 2c6b424 because of a bug involving event handlers bleeding into all other instances of the same object/"class" (see 7157) 中更改。

可能最好的兼容性选择是在构造函数中添加事件处理程序:

function TehEmitter(){
  EventEmitter.call(this);
  this.on('start', onStart);
}

function onStart(fCallback) {
  fCallback();
}