skills/react-testing-library/SKILL.md
React Testing Library best practices for writing maintainable, user-centric tests. Use when writing, reviewing, or refactoring RTL tests. Triggers on test files, testing patterns, getBy/queryBy queries, userEvent, waitFor, and component testing.
npx skillsauth add shipshitdev/library react-testing-libraryInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
43 rules across 9 categories for testing React components with Testing Library, prioritized by impact to guide test writing and code review.
| Priority | Category | Impact | Prefix |
|----------|----------|--------|--------|
| 1 | Query Selection | CRITICAL | query- |
| 2 | Async Handling | CRITICAL | async- |
| 3 | Common Anti-Patterns | CRITICAL | anti- |
| 4 | User Interaction | HIGH | user- |
| 5 | Assertions | HIGH | assert- |
| 6 | Component Setup | MEDIUM | setup- |
| 7 | Test Structure | MEDIUM | struct- |
| 8 | Debugging | LOW-MEDIUM | debug- |
| 9 | Accessibility Testing | LOW | a11y- |
query-prefer-role - Prefer getByRole over other queriesquery-avoid-testid - Avoid getByTestId as primary queryquery-use-screen - Use screen for queriesquery-label-text-forms - Use getByLabelText for form fieldsquery-role-name-option - Use name option with getByRolequery-get-vs-query - Use getBy for present, queryBy for absentquery-within-scope - Use within() to scope queriesasync-findby-over-waitfor - Use findBy instead of waitFor + getByasync-await-findby - Always await findBy queriesasync-single-assertion-waitfor - Single assertion in waitForasync-no-side-effects-waitfor - Avoid side effects in waitForasync-waitfor-disappear - Use waitForElementToBeRemovedanti-unnecessary-act - Avoid unnecessary act() wrappinganti-manual-cleanup - Remove manual cleanup callsanti-implementation-details - Avoid testing implementation detailsanti-empty-waitfor - Avoid empty waitFor callbacksanti-container-queries - Avoid using container for queriesanti-redundant-roles - Avoid adding redundant ARIA rolesuser-prefer-userevent - Use userEvent over fireEventuser-setup-before-render - Setup userEvent before renderuser-await-interactions - Always await userEvent interactionsuser-keyboard-for-special-keys - Use keyboard() for special keysuser-clear-before-type - Use clear() before retypingassert-jest-dom-matchers - Use jest-dom matchersassert-visible-over-in-document - Use toBeVisible() for visibilityassert-text-content - Use toHaveTextContent() for textassert-have-value - Use toHaveValue() for inputsassert-accessible-description - Use toHaveAccessibleDescription()setup-wrapper-providers - Use wrapper option for providerssetup-custom-render - Create custom render with providerssetup-mock-modules - Mock modules at module levelsetup-fake-timers - Configure userEvent with fake timerssetup-render-hook - Use renderHook for testing hooksstruct-arrange-act-assert - Follow Arrange-Act-Assert patternstruct-one-behavior-per-test - Test one behavior per teststruct-descriptive-names - Use descriptive test namesstruct-avoid-beforeeach-render - Avoid render() in beforeEachdebug-screen-debug - Use screen.debug() to inspect DOMdebug-logroles - Use logRoles to find available rolesdebug-testing-playground - Use Testing Playground for queriesa11y-role-queries-verify - Role queries verify accessibilitya11y-verify-focus - Test focus managementa11y-test-aria-states - Test ARIA states and propertiesRead individual reference files for detailed explanations and code examples:
| File | Description | |------|-------------| | references/_sections.md | Category definitions and ordering | | assets/templates/_template.md | Template for new rules | | metadata.json | Version and reference information |
development
TypeScript refactoring and modernization guidelines from a principal specialist perspective. This skill should be used when refactoring, reviewing, or modernizing TypeScript code to ensure type safety, compiler performance, and idiomatic patterns. Triggers on tasks involving TypeScript type architecture, narrowing, generics, error handling, or migration to modern TypeScript features.
tools
Resolves TypeScript and JavaScript problems across type-level programming, performance, monorepo management, migration, and modern tooling. Invoke when diagnosing "type instantiation excessively deep" errors, migrating JS to TS, configuring strict tsconfig, debugging module resolution, or choosing between Biome/ESLint/Turborepo/Nx.
tools
Turborepo monorepo build system guidance. Triggers on: `turbo.json`, task pipelines, `dependsOn`, caching, remote cache, the `turbo` CLI, `--filter`, `--affected`, CI optimization, environment variables, internal packages, monorepo structure, and package boundaries. Use when the user configures tasks or workflows, creates packages, sets up a monorepo, shares code between apps, runs changed packages, debugs cache behavior, or works in an `apps/` plus `packages/` workspace.
tools
Provides Tailwind CSS v4 performance optimization and best practices guidelines. Triggers when writing, reviewing, or refactoring Tailwind CSS v4 code; when working with Tailwind configuration, @theme directive, utility classes, responsive design, dark mode, container queries, or CSS generation optimization.