如何使用 Jest 测试处理程序?

3

我正在尝试使用jest模拟arcgis js库中的事件处理程序,但是在获取对处理程序的引用和触发回调函数时遇到了问题。我决定使用node内置的events模块来模拟事件处理程序,但是当我触发事件时,回调函数从未被执行。

foo.ts

  createSomething(
    onComplete: fooCompleteCallback
  ): void {
    if (this.isReady()) {
      const handler = foo.addEventHandler((event) => {
        if (event.state === EVENT_COMPLETE) {
          handler.remove();
          onComplete(event.graphic);
        }
      });
      foo.create();
    }
  }

foo.test.ts

import events from 'events';

class foo {
  eventEmitter = new events.EventEmitter();
  
  addEventHandler = () => this.eventEmitter.on('complete', (callback) => callback({state: 'complete'}));
  isReady = jest.fn().mockImplementation(() => true);
  create = () => this.eventEmitter.emit('complete');
}
export default new foo();
1个回答

3

我很接近了,这是正确的测试代码:

foo.test.ts

class foo {

  eventEmitter = new events.EventEmitter();
  handler = {remove: jest.fn()}

  fooEvent= {
    state: 'complete'
  }
  
  addEventHandler = (callback) => {
    this.eventEmitter.on('complete', () => callback(this.sketchEvent)); 
    return this.handler;
  };

  create = (createOptions) => {this.eventEmitter.emit('complete')};
}
export default new foo();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接