如何使用Mocha / Jest模拟/测试事件监听器?

时间:2019-03-27 18:30:36

标签: javascript testing mocha jestjs

class Router {
    constructor() {
        window.onhashchange = this.hashChange;
    }

    hashChange() {
        console.log('Hash Changed');
        return true;
    }
}

export default Router;

我正在尝试找到一种方法来测试node.js中的上述代码。但是节点中没有window对象。如何使用Mocha / Jest模拟对象并测试事件侦听器?目的是测试更改URL哈希后是否调用hashChange()

1 个答案:

答案 0 :(得分:1)

Jest中的default test environmentjsdom提供的类似浏览器的环境。

jsdom提供了window,因此默认情况下可用于在Jest中运行的测试。

您可以使用Jest来测试上述代码,如下所示:

class Router {
  constructor() {
      window.onhashchange = this.hashChange;
  }

  hashChange() {
      console.log('Hash Changed');
      return true;
  }
}

test('Router', () => {
  const hashChangeSpy = jest.spyOn(Router.prototype, 'hashChange');
  const router = new Router();
  window.onhashchange();
  expect(hashChangeSpy).toHaveBeenCalled();  // Success!
});