5180 fichiers 38.5 Mo 0 téléchargements 95 vues mis à jour il y a 4 heures ui
nitro-v36-with-renderer-v36 / src / hooks / useLocalStorage.test.ts
useLocalStorage.test.ts 1.6 Ko Télécharger le fichier
/* @vitest-environment jsdom */
import { act, cleanup, renderHook } from '@testing-library/react';
import { afterEach, describe, expect, it, vi } from 'vitest';

const setLocalStorage = vi.hoisted(() => vi.fn());

vi.mock('../api', () => ({ GetLocalStorage: () => undefined, SetLocalStorage: setLocalStorage }));

const { discardLocalStorage, useLocalStorage } = await import('./useLocalStorage');

afterEach(cleanup);

describe('useLocalStorage', () =>
{
    it('keeps every update of a burst, even through a setter from an earlier render', () =>
    {
        const { result } = renderHook(() => useLocalStorage<number[]>('burst-test', []));
        const staleSetter = result.current[1];

        act(() =>
        {
            staleSetter(value => [ ...value, 1 ]);
            staleSetter(value => [ ...value, 2 ]);
        });

        // An async callback (avatar image, translation) still holding the first render's setter.
        act(() => staleSetter(value => [ ...value, 3 ]));

        expect(result.current[0]).toEqual([ 1, 2, 3 ]);
    });

    it('a discard resets the live value and drops the write still waiting', () =>
    {
        vi.useFakeTimers();
        setLocalStorage.mockClear();

        const { result } = renderHook(() => useLocalStorage<string[]>('discard-test', []));

        act(() => result.current[1]([ 'hello' ]));
        act(() => discardLocalStorage([ 'discard-test' ]));
        act(() => vi.advanceTimersByTime(1000));

        expect(result.current[0]).toEqual([]);
        expect(setLocalStorage).not.toHaveBeenCalled();

        vi.useRealTimers();
    });
});
15Sujets
1Dépôts
20Membres
7En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser