Files
Coltura/frontend/shared/utils/__tests__/debounce.test.ts
Matthieu 4c142aecbb refactor(front) : extrait debounce dans shared/utils + tests Vitest
T-013 — sort la fonction debounce inline de audit-log.vue vers
frontend/shared/utils/debounce.ts (auto-importe par Nuxt) et ajoute
3 tests Vitest (delay coalesce, derniere invocation gagne, plusieurs
executions espacees). Pret pour reutilisation sur les prochaines
pages avec recherche/filtres.
2026-04-23 11:46:13 +02:00

53 lines
1.4 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest'
import { debounce } from '../debounce'
describe('debounce', () => {
it('attend delay ms avant d\'appeler fn une seule fois apres plusieurs invocations rapides', () => {
vi.useFakeTimers()
const fn = vi.fn()
const debounced = debounce(fn, 100)
debounced()
debounced()
debounced()
expect(fn).not.toHaveBeenCalled()
vi.advanceTimersByTime(100)
expect(fn).toHaveBeenCalledTimes(1)
vi.useRealTimers()
})
it('passe les arguments du dernier appel a fn', () => {
vi.useFakeTimers()
const fn = vi.fn<(a: string, b: number) => void>()
const debounced = debounce(fn, 50)
debounced('first', 1)
debounced('second', 2)
debounced('third', 3)
vi.advanceTimersByTime(50)
expect(fn).toHaveBeenCalledTimes(1)
expect(fn).toHaveBeenCalledWith('third', 3)
vi.useRealTimers()
})
it('autorise plusieurs executions espacees dans le temps', () => {
vi.useFakeTimers()
const fn = vi.fn()
const debounced = debounce(fn, 50)
debounced()
vi.advanceTimersByTime(50)
expect(fn).toHaveBeenCalledTimes(1)
debounced()
vi.advanceTimersByTime(50)
expect(fn).toHaveBeenCalledTimes(2)
vi.useRealTimers()
})
})