【发布时间】:2021-06-01 17:56:55
【问题描述】:
我正在尝试模拟回调函数(cb)并想检查是否被调用了 1 次。
我试过了:
jest.useFakeTimers()
const cb = (t: number) => `message-${t}`
const spy = jest.fn(cb)
// This one also fails.
// jest.spyOn(React, 'useRef').mockReturnValue({ current: cb });
const { result } = renderHook(() => useTimer(3, cb))
await waitFor(() => expect(result.current[0]).toBe(3))
await waitFor(() => expect(result.current[1]).toBe('message-3'))
await waitFor(() => expect(spy).toBeCalledTimes(1)) // received 0
const useTimer = (
startTimeSec: number,
cb: (currentSeconds: number) => string = (c) => '',
): [number, string] => {
const [timer, setTimer] = useState(startTimeSec)
const [intervalTime, setIntervalTime] = useState<null | number>(null)
const [message, setMessage] = useState<string>('')
const callback = React.useRef(cb)
useEffect(() => {
if (startTimeSec) {
setTimer(startTimeSec)
setMessage(callback.current(timer))
}
}, [startTimeSec])
//...
return [timer, message]
}
有什么想法吗?
【问题讨论】:
标签: reactjs typescript jestjs mocking react-hooks