5180 fichiers 38.5 Mo 0 téléchargements 97 vues mis à jour il y a 4 heures ui
nitro-v36-with-renderer-v36 / src / common / ToggleButton.test.tsx
ToggleButton.test.tsx 1.8 Ko Télécharger le fichier
/* @vitest-environment jsdom */

import { cleanup, fireEvent, render, screen } from '@testing-library/react';
import { useState } from 'react';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { ToggleButton } from './ToggleButton';

const Demo = ({ onClick }: { onClick?: () => void }) => {
    const [on, setOn] = useState(false);

    return (
        <ToggleButton
            aria-label="Zoom"
            pressed={on}
            onClick={() => {
                setOn((value) => !value);
                onClick?.();
            }}
        />
    );
};

describe('ToggleButton', () => {
    afterEach(() => cleanup());

    it('is a button whose pressed state follows the `pressed` prop', () => {
        render(<Demo />);

        const button = screen.getByRole('button', { name: 'Zoom' });

        expect(button.tagName).toBe('BUTTON');
        expect(button.getAttribute('aria-pressed')).toBe('false');

        fireEvent.click(button);

        expect(button.getAttribute('aria-pressed')).toBe('true');
        expect(button.hasAttribute('data-pressed')).toBe(true);
    });

    it('keeps firing onClick, even on the already pressed item of a pick-one set', () => {
        const onClick = vi.fn();

        render(<ToggleButton aria-label="Model" pressed onClick={onClick} />);
        fireEvent.click(screen.getByRole('button', { name: 'Model' }));

        expect(onClick).toHaveBeenCalledTimes(1);
        expect(screen.getByRole('button', { name: 'Model' }).getAttribute('aria-pressed')).toBe('true');
    });

    it('does not fire when disabled', () => {
        const onClick = vi.fn();

        render(<ToggleButton disabled aria-label="Locked" pressed={false} onClick={onClick} />);
        fireEvent.click(screen.getByRole('button', { name: 'Locked' }));

        expect(onClick).not.toHaveBeenCalled();
    });
});
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