我试图创建一个简单的事件发射器,并且当我尝试测试发射器时,它通过玩笑显示为未定义。
事件发射器的代码:
class EventEmitter {
constructor() {
this.events = {};
}
on(e, fn) {
if (this.events[e]) {
return this.event[e].add(fn);
}
return this.events[e] = new Set([fn]);
}
once(e, fn) {
if (this.events[e]) {
this.event[e].add(fn, 1);
}
this.events[e] = new Set([fn, 1]);
}
emit(e, ...args) {
if (this.events[e]) {
this.events[e].forEach(fn => {
if (typeof fn === 'function')
fn.apply(null, args);
});
if (this.events[e].has(1)) {
delete this.events[e];
}
} else if (!this.events[e]) {
console.log('Event Argument does not exist - please enter a valid event');
}
}
off(e) {
if (arguments.length === 0) {
this.events = {};
}
if (this.events[e]) {
delete this.events[e];
} else if (!this.events[e]) {
return console.log('Event Argument does not exist - please enter a valid event');
}
}
}
测试代码:
const EventEmitter = require('../index.js');
// Creating new Event Emitter
test('should Emit named events with a single argument', () => {
const ee = new EventEmitter();
ee.on('multiple', (x, y) => {
console.log(`First Argument: ${x}, Second Argument: ${y}`);
});
ee.on('single', () => "Why isnt this working")
const res = console.log(ee.emit('single'))
expect(res).toBe('Why isnt this working')
})
const res返回未定义,但是我不确定为什么-任何帮助将不胜感激!