【问题标题】:How to test handler with jest?如何用笑话测试处理程序?
【发布时间】:2022-01-11 18:10:28
【问题描述】:

我正在尝试使用 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();

【问题讨论】:

    标签: events jestjs handler


    【解决方案1】:

    我已经很接近了,这是正确的测试代码的样子

    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();
    

    【讨论】:

      猜你喜欢
      • 2018-12-23
      • 2021-06-05
      • 2015-12-30
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 2018-08-09
      相关资源
      最近更新 更多