测试事件是否 运行 开玩笑

Testing to see if an event is running with jest

我正在想一个场景来实际测试事件是否 运行。这就是我的大脑是如何工作的。我注册了一个侦听器,我期待间谍被调用,但它不是?

const EventEmitter = require('events')
const ee = new EventEmitter()

describe('Event Emitter', () => {
  it('Emit Listener', () => {
    ee.on('test', function() {})   
    const spy = jest.spyOn(ee, 'on')

    ee.emit('test')
    expect(spy).toHaveBeenCalledTimes(1)
  })
})

jest.spyOn(ee, 'on') 设置一个可以测试 ee.on(...) 之后是否被调用的间谍。因为它不是,所以测试失败。间谍不可能追溯。相反,它应该在调用之前设置:

const spy = jest.spyOn(ee, 'on')
ee.on('test', function() {})   

expect(spy).toHaveBeenCalledTimes(1)
expect(spy).toHaveBeenCalledWith(expect.any(Function))

或者如果objective是测试事件,应该是:

const spy = jest.fn()
ee.on('test', spy)
ee.emit('test')

expect(spy).toHaveBeenCalledTimes(1)