|
1 | 1 | import { render } from '@testing-library/react' |
2 | 2 | import React from 'react' |
3 | 3 | import { describe, expect, it } from 'vitest' |
4 | | -import { Spinner } from '../../src/index.js' |
| 4 | +import { ConfigProvider, Spinner } from '../../src/index.js' |
5 | 5 |
|
6 | 6 | describe('Spinner Component', () => { |
7 | 7 | it('renders with base and additional class names', () => { |
8 | | - const { container } = render(<Spinner className="extra" />) |
9 | | - expect(container.firstElementChild?.classList).toContain('spinner') |
10 | | - expect(container.firstElementChild?.classList).toContain('extra') |
| 8 | + const { container } = render( |
| 9 | + <ConfigProvider value={{ customClass: { spinner: 'extra' } }}> |
| 10 | + <Spinner/> |
| 11 | + </ConfigProvider> |
| 12 | + ) |
| 13 | + const classNames = [...container.firstElementChild?.classList.values() ?? []] |
| 14 | + // Vite generates class names for CSS modules that look like _spinner_c053a8 |
| 15 | + expect(classNames.some(className => className.startsWith('_spinner_'))).toBe(true) |
| 16 | + expect(classNames).toContain('extra') |
| 17 | + }) |
| 18 | + it('is accessible as a role=status element', () => { |
| 19 | + const { container } = render( <Spinner/> ) |
| 20 | + expect(container.firstElementChild?.getAttribute('role')).toBe('status') |
| 21 | + expect(container.firstElementChild?.getAttribute('aria-live')).toBe('polite') |
| 22 | + }) |
| 23 | + it('contains an accessible text for screen readers', () => { |
| 24 | + const { getByText } = render( <Spinner/> ) |
| 25 | + expect(getByText('Loading...')).toBeDefined() |
| 26 | + }) |
| 27 | + it('let pass a custom accessible text for screen readers', () => { |
| 28 | + const text = 'Fetching data' |
| 29 | + const { getByText } = render( <Spinner text={text}/> ) |
| 30 | + expect(getByText(text)).toBeDefined() |
11 | 31 | }) |
12 | 32 | }) |
0 commit comments