5180 fichiers 38.5 Mo 0 téléchargements 262 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / hooks / events / eventHookRegistration.test.tsx
eventHookRegistration.test.tsx 2 Ko Télécharger le fichier
/* @vitest-environment jsdom */
import { GetCommunication, MessageEvent } from '@octane/renderer';
import { mockEventDispatcher } from '../../octane-renderer.mock';
import { act, cleanup, renderHook } from '@testing-library/react';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { useEventDispatcher } from './useEventDispatcher';
import { useMessageEvent } from './useMessageEvent';

afterEach(cleanup);

class RegistrationProbeEvent extends MessageEvent {}

describe('event hook registration', () => {
    it('useMessageEvent registers once and calls the newest handler', () => {
        const calls: string[] = [];
        const before = vi.mocked(GetCommunication).mock.calls.length;
        const { rerender } = renderHook(({ label }) => useMessageEvent(RegistrationProbeEvent as any, () => calls.push(label)), {
            initialProps: { label: 'first' }
        });

        rerender({ label: 'second' });
        rerender({ label: 'third' });

        expect(vi.mocked(GetCommunication).mock.calls.length - before).toBe(1);

        act(() => mockEventDispatcher.dispatchEvent(new (RegistrationProbeEvent as any)()));
        expect(calls).toEqual(['third']);
    });

    it('useEventDispatcher listens once for an inline type array and calls the newest handler', () => {
        const calls: string[] = [];
        const dispatcher = { addEventListener: vi.fn(), removeEventListener: vi.fn() } as any;
        const { rerender, unmount } = renderHook(({ label }) => useEventDispatcher(['a', 'b'], dispatcher, () => calls.push(label)), {
            initialProps: { label: 'first' }
        });

        rerender({ label: 'second' });

        expect(dispatcher.addEventListener).toHaveBeenCalledTimes(2);
        expect(dispatcher.removeEventListener).not.toHaveBeenCalled();

        dispatcher.addEventListener.mock.calls[0][1]({ type: 'a' });
        expect(calls).toEqual(['second']);

        unmount();
        expect(dispatcher.removeEventListener).toHaveBeenCalledTimes(2);
    });
});
15Sujets
1Dépôts
20Membres
2En 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