无法模拟在 node.js 中使用事件发射器刺激的类中的函数
Unable to mock out function within a class that gets stimulated using event emitter in node.js
我有 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 无法存根导出方法。
相关文章:
- 双条件jQuery函数事件
- 将函数事件绑定到更改函数的复选框/标签
- 从c#代码后面触发jQuery函数/事件
- 正在解码函数(事件){}的JavaScript语法
- 如何防止我的$('form').submit(函数(事件))应用于某些表单
- 访问PDF.js查看器函数/事件
- 从内部调用 JavaScript 函数事件
- JavaScript/jQuery调用函数事件
- jquery.live('点击',函数(事件)在页面加载时只工作一次
- 如何在JavaScript中跟踪回调函数事件
- 正确删除匿名函数事件处理程序
- jQuery:将 $(this) 传递给命名函数事件处理程序
- 函数(事件)变量是否可以不永久更改实例变量的内容
- Javascript函数事件没有按顺序触发
- 如何按类循环函数事件
- jQuery与对象的绑定函数'事件处理程序
- 函数(事件)在一个Opera上下文菜单扩展
- 用meteor.js响应式调用js函数/事件
- 缩短JavaScript函数事件
- 将onchange函数事件附加到变量