无法模拟在 node.js 中使用事件发射器刺激的类中的函数

Unable to mock out function within a class that gets stimulated using event emitter in node.js

本文关键字:函数 事件 发射器 刺激 模拟 node js      更新时间:2023-09-26

我有 2 个文件。

侦听器.js:

'use strict';    
var events = require('./g-events');    
function start() {
  console.log('starting');
}
events.on(events.ACTIVITY_EVENT, function() {
  console.log('i am in here');
  start();
});
// Public functions
module.exports = {
  start: start
};

事件定义为:

'use strict';
var EventEmitter2 = require('eventemitter2').EventEmitter2;
var m = new EventEmitter2({
  newListener: false,
  maxListeners: 20
});
m.ACTIVITY_EVENT = 'activityEvent';
module.exports = m;

创建了一个测试终结点的测试类。

var listener = require('../listener');
var events = require('../g-events');    
describe('test listener', function() {
  listener.start = function() {
    console.log('fake start');
  };
  it('test listener', function() {
    events.emit(events.ACTIVITY_EVENT);
  });
});

当测试运行时,输出是"我在这里",然后是"正在启动"。为什么它没有正确覆盖测试中定义的启动函数?

即使使用 sinon 来存根方法,它仍然评估原始方法。

我最终偶然发现了重新布线 https://github.com/jhnns/rewire 做我想做的事,尽管我不完全确定为什么 sinon 无法存根导出方法。