From fuse-react
Testing Library for React 19 - render, screen, userEvent, waitFor, Suspense. Use when writing tests for React components with Vitest.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fuse-react:react-testingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Test React components the way users interact with them.
references/accessibility-testing.mdreferences/async-testing.mdreferences/hooks-testing.mdreferences/installation.mdreferences/mocking-patterns.mdreferences/msw-setup.mdreferences/queries.mdreferences/react-19-hooks.mdreferences/templates/accessibility-audit.mdreferences/templates/api-integration.mdreferences/templates/basic-setup.mdreferences/templates/component-async.mdreferences/templates/component-basic.mdreferences/templates/error-boundary.mdreferences/templates/form-testing.mdreferences/templates/hook-basic.mdreferences/templates/suspense-testing.mdreferences/user-events.mdreferences/vitest-config.mdTest React components the way users interact with them.
Before ANY implementation, use TeamCreate to spawn 3 agents:
After implementation, run fuse-ai-pilot:sniper for validation.
| Feature | Benefit |
|---|---|
| User-centric | Tests what users see |
| Accessible queries | Encourages a11y markup |
| No implementation details | Resilient to refactoring |
| Vitest integration | 10-20x faster than Jest |
getByRole is most accessiblesetTimeout| Topic | Reference |
|---|---|
| Setup & installation | references/installation.md |
| Query priority | references/queries.md |
| User interactions | references/user-events.md |
| Async patterns | references/async-testing.md |
| API mocking | references/msw-setup.md |
| React 19 hooks | references/react-19-hooks.md |
| Accessibility | references/accessibility-testing.md |
| Custom hooks | references/hooks-testing.md |
| Vitest config | references/vitest-config.md |
| Mocking patterns | references/mocking-patterns.md |
| Template | Use Case |
|---|---|
templates/basic-setup.md | Vitest + RTL + MSW config |
templates/component-basic.md | Simple component tests |
templates/component-async.md | Loading/error/success |
templates/form-testing.md | Forms + useActionState |
templates/hook-basic.md | Custom hook tests |
templates/api-integration.md | MSW integration tests |
templates/suspense-testing.md | Suspense + use() |
templates/error-boundary.md | Error boundary tests |
templates/accessibility-audit.md | axe-core a11y audit |
| Pattern | Reason | Alternative |
|---|---|---|
fireEvent | Not realistic | userEvent |
setTimeout | Flaky | waitFor, findBy |
getByTestId first | Not accessible | getByRole |
| Direct fetch mocking | Hard to maintain | MSW |
Empty waitFor | No assertion | Add expect() |
npm install -D vitest @testing-library/react \
@testing-library/user-event @testing-library/jest-dom \
jsdom msw
→ See templates/basic-setup.md for complete configuration
import { render, screen } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
test('button click works', async () => {
const user = userEvent.setup()
render(<Button onClick={fn}>Click</Button>)
await user.click(screen.getByRole('button'))
expect(fn).toHaveBeenCalled()
})
→ See templates/component-basic.md for more examples
getByRole - Buttons, headings, inputsgetByLabelText - Form inputsgetByText - Static textgetByTestId - Last resort// Preferred: findBy
await screen.findByText('Loaded')
// Alternative: waitFor
await waitFor(() => expect(...).toBeInTheDocument())
→ See templates/component-async.md
const user = userEvent.setup()
await user.click(button)
await user.type(input, 'text')
→ See references/user-events.md
npx claudepluginhub fusengine/agents --plugin fuse-reactTests React components with React Testing Library, Vitest/Jest, MSW for network mocking, and axe accessibility assertions. Guides test vs E2E decisions.
Guides React component testing with React Testing Library, Vitest/Jest, MSW mocking, and axe accessibility assertions. Covers test boundaries between component and E2E tests.
Provides testing patterns and examples for React components, hooks, and integrations using Vitest, React Testing Library, and Jest.