class Router {
constructor() {
window.onhashchange = this.hashChange;
}
hashChange() {
console.log('Hash Changed');
return true;
}
}
export default Router;
我正在尝试找到一种方法来测试node.js中的上述代码。但是节点中没有window
对象。如何使用Mocha / Jest模拟对象并测试事件侦听器?目的是测试更改URL哈希后是否调用hashChange()
答案 0 :(得分:1)
Jest
中的default test environment是jsdom
提供的类似浏览器的环境。
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!
});