Files
llm-browser/frontend/tests/useTimeout.test.tsx
T
2026-10-19 16:04:17 +02:00

51 lines
1.3 KiB
TypeScript

import { act, renderHook } from '@testing-library/react'
import { vi } from 'vitest'
import { useTimeout } from '../src/utils/useTimeout'
describe('useTimeout', () => {
it('fires the callback after the delay', () => {
vi.useFakeTimers()
const { result } = renderHook(() => useTimeout())
const fn = vi.fn()
act(() => {
result.current.schedule(fn, 1000)
})
expect(fn).not.toHaveBeenCalled()
act(() => {
vi.advanceTimersByTime(1000)
})
expect(fn).toHaveBeenCalledTimes(1)
vi.useRealTimers()
})
it('clear() cancels pending timers', () => {
vi.useFakeTimers()
const { result } = renderHook(() => useTimeout())
const fn = vi.fn()
act(() => {
result.current.schedule(fn, 1000)
result.current.clear()
})
act(() => {
vi.advanceTimersByTime(5000)
})
expect(fn).not.toHaveBeenCalled()
vi.useRealTimers()
})
it('clears pending timers on unmount (no setState-after-unmount leaks)', () => {
vi.useFakeTimers()
const { result, unmount } = renderHook(() => useTimeout())
const fn = vi.fn()
act(() => {
result.current.schedule(fn, 1000)
})
unmount()
act(() => {
vi.advanceTimersByTime(5000)
})
expect(fn).not.toHaveBeenCalled()
vi.useRealTimers()
})
})