agentsclimarketplace

React testing

Skill fusengine/agents/plugins/react-expert/skills/react-testing

Redefining development through cognitive automation and collaborative agent systems.

Install
npx -y skills add fusengine/agents --skill react-testing

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 22 stars22 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Testing Library for React 19 - render, screen, userEvent, waitFor, Suspense. Use when writing tests for React components with Vitest.

SKILL.md

4.9 KB, 979 tokens by cl100k_base, as published. Nobody here has run it

React Testing Library

Test React components the way users interact with them.

Agent Workflow (MANDATORY)

Before ANY implementation, use TeamCreate to spawn 3 agents:

  1. fuse-ai-pilot:explore-codebase - Analyze existing test patterns
  2. fuse-ai-pilot:research-expert - Verify latest Testing Library docs via Context7/Exa
  3. mcp__context7__query-docs - Check userEvent, waitFor patterns

After implementation, run fuse-ai-pilot:sniper for validation.


Overview

When to Use

  • Testing React component behavior
  • Validating user interactions
  • Ensuring accessibility compliance
  • Mocking API calls with MSW
  • Testing custom hooks
  • Testing React 19 features (useActionState, use())

Why React Testing Library

FeatureBenefit
User-centricTests what users see
Accessible queriesEncourages a11y markup
No implementation detailsResilient to refactoring
Vitest integration10-20x faster than Jest

Critical Rules

  1. Query by role first - getByRole is most accessible
  2. Use userEvent, not fireEvent - Realistic interactions
  3. waitFor for async - Never setTimeout
  4. MSW for API mocking - Don't mock fetch
  5. Test behavior, not implementation - No internal state testing

Reference Guide

Concepts

TopicReference
Setup & installationreferences/installation.md
Query priorityreferences/queries.md
User interactionsreferences/user-events.md
Async patternsreferences/async-testing.md
API mockingreferences/msw-setup.md
React 19 hooksreferences/react-19-hooks.md
Accessibilityreferences/accessibility-testing.md
Custom hooksreferences/hooks-testing.md
Vitest configreferences/vitest-config.md
Mocking patternsreferences/mocking-patterns.md

Templates

TemplateUse Case
templates/basic-setup.mdVitest + RTL + MSW config
templates/component-basic.mdSimple component tests
templates/component-async.mdLoading/error/success
templates/form-testing.mdForms + useActionState
templates/hook-basic.mdCustom hook tests
templates/api-integration.mdMSW integration tests
templates/suspense-testing.mdSuspense + use()
templates/error-boundary.mdError boundary tests
templates/accessibility-audit.mdaxe-core a11y audit

Forbidden Patterns

PatternReasonAlternative
fireEventNot realisticuserEvent
setTimeoutFlakywaitFor, findBy
getByTestId firstNot accessiblegetByRole
Direct fetch mockingHard to maintainMSW
Empty waitForNo assertionAdd expect()

Quick Start

Install

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

Basic Test

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


Best Practices

Query Priority

  1. getByRole - Buttons, headings, inputs
  2. getByLabelText - Form inputs
  3. getByText - Static text
  4. getByTestId - Last resort

Async Pattern

// Preferred: findBy
await screen.findByText('Loaded')

// Alternative: waitFor
await waitFor(() => expect(...).toBeInTheDocument())

→ See templates/component-async.md

userEvent Setup

const user = userEvent.setup()
await user.click(button)
await user.type(input, 'text')

→ See references/user-events.md

What ships with it: 19 files

48.2 KB alongside SKILL.md

Keep looking

Skills are one crate of 327,069. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.