// @vitest-environment jsdom import { render, screen, cleanup } from '@testing-library/react'; import { describe, it, expect, afterEach } from 'vitest'; import { Button } from '../Button'; describe('Button', () => { afterEach(() => { cleanup(); }); it('passes aria-label to the button element', () => { render(); const button = screen.getByRole('button', { name: /test label/i }); expect(button).toBeTruthy(); }); it('passes other HTML attributes', () => { render(); const button = screen.getByTestId('custom-button'); expect(button).toBeTruthy(); }); it('renders loading state correctly', () => { render(); const button = screen.getByRole('button', { name: /submit/i }) as HTMLButtonElement; expect(button.getAttribute('aria-busy')).toBe('true'); expect(button.disabled).toBe(true); // Verify text is present (opacity: 0 doesn't remove from DOM) expect(screen.getByText('Submit')).toBeTruthy(); }); });