export function useTimer(initValue: number, isProceed: boolean) {
const [value, setter] = useState(initValue)
useEffect(() => {
setter(initValue)
const interval = setInterval(() => {
if (isProceed && value > 0) setter((c) => c - 1)
else if (value < 0) {
clearInterval(interval)
}
}, 1000)
return () => {
clearInterval(interval)
}
}, [initValue, value, isProceed])
return {
seconds:
value > 0
? `${Math.floor(value / 60)}:${value % 60 < 10 ? '0' : ''}${value % 60}`
: '',
resetTimer: () => setter(initValue),
}
}
test('InitialCountState < 0', async () => {
const { hydrate, result, waitForValueToChange } = renderHook(() =>
useTimer(InitialCountState, isStartTimer)
)
InitialCountState = -1
isStartTimer = true
hydrate()
await waitForValueToChange(() => result.current.seconds)
expect(result.current.seconds).toBe('')
})
Timed out in waitForValueToChange after 1000ms.
Failed to resolve failure result during hooks test. It's said that it failed because it was over time, but I don't know how to solve it. Is there a good way?