使用 renderHooks 测试 window
Testing window with renderHooks
我有这个自定义挂钩:
import { useEffect } from 'react'
const useBeforeUnload = () => {
useEffect(() => {
const handleBeforeUnload = ev => {
console.log('Test')
}
window.addEventListener('beforeunload', handleBeforeUnload)
return () => window.removeEventListener('beforeunload', handleBeforeUnload)
}, [])
}
export default useBeforeUnload
我正在尝试进行一个简单的测试以检查 window.addEventListener
是否被调用:
import { renderHook } from '@testing-library/react-hooks'
import useBeforeUnload from './useBeforeUnload'
const spy = jest.fn()
delete window.addEventListener
window.addEventListener = spy
describe('useBeforeUnload', () => {
describe('When the hook is initialised', () => {
beforeEach(() => {
renderHook(() => useBeforeUnload())
})
test('It should register the correct event listener', () => {
expect(spy).toHaveBeenCalledTimes(1)
})
})
})
但是说监听器被调用了6次总是失败???
这是因为 react-dom 也在添加事件处理程序(用于错误事件),这些处理程序会增加您的调用次数
你可以做的一件事是断言你想要它添加什么而不是多少次
expect(spy).toHaveBeenCalledWith("beforeunload",expect.anything());
我有这个自定义挂钩:
import { useEffect } from 'react'
const useBeforeUnload = () => {
useEffect(() => {
const handleBeforeUnload = ev => {
console.log('Test')
}
window.addEventListener('beforeunload', handleBeforeUnload)
return () => window.removeEventListener('beforeunload', handleBeforeUnload)
}, [])
}
export default useBeforeUnload
我正在尝试进行一个简单的测试以检查 window.addEventListener
是否被调用:
import { renderHook } from '@testing-library/react-hooks'
import useBeforeUnload from './useBeforeUnload'
const spy = jest.fn()
delete window.addEventListener
window.addEventListener = spy
describe('useBeforeUnload', () => {
describe('When the hook is initialised', () => {
beforeEach(() => {
renderHook(() => useBeforeUnload())
})
test('It should register the correct event listener', () => {
expect(spy).toHaveBeenCalledTimes(1)
})
})
})
但是说监听器被调用了6次总是失败???
这是因为 react-dom 也在添加事件处理程序(用于错误事件),这些处理程序会增加您的调用次数
你可以做的一件事是断言你想要它添加什么而不是多少次
expect(spy).toHaveBeenCalledWith("beforeunload",expect.anything());