【发布时间】:2020-12-16 04:15:05
【问题描述】:
我有下一个功能:
const hashChangeCallback = event => {
console.log('event', event.oldUrl)
}
const hashHandler = () => {
return {
add: () => {
window.addEventListener('hashchange', (event) => hashChangeCallback(event), false)
},
remove: () => {
window.removeEventListener('hashchange', (event) => hashChangeCallback(event), false)
},
}
}
在我的 Jest 测试中,我想检查是否在触发事件时调用了 hashChangeCallback 函数:
import { hashHandler } from './urlHashChangeListener'
describe('urlHashChangeListener', () => {
const setupHashListeners = hashHandler()
it('hashChangeCallback should be called when hash changed if listener is added', () => {
setupHashListeners.add()
window.dispatchEvent(new HashChangeEvent('hashchange', {
oldURL: 'http://test.com/test.html#hash123',
newURL: 'http://test.com/test.html#hash3'
}))
// expect hashChangeCallback to be called
})
})
如何正确操作?我是否必须以某种方式模拟/监视此功能?
【问题讨论】:
-
不模拟 addEventListener 是不可能的。 hashChangeCallback 是本地的,因此在测试中无法访问。在您发布的案例中没有意义。只需测试 console.log 是否被调用。
标签: javascript testing jestjs enzyme