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.
53 lines
1.4 KiB
TypeScript
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()
|
|
})
|
|
})
|