Skip to content
jest-test-scaffolder logo

Jest Test Scaffolder Workflow

jest-test-scaffolder

Scaffolds Jest unit tests for React components and hooks. Use when creating tests for frontend components.

mattnigh/skills_collection0installs24stars

SKILL.md

Full skill instructions

Jest Test Scaffolder Workflow

This skill creates comprehensive unit tests for React components using Jest, React Testing Library, and user-event.

Workflow Steps

  1. Identify component to test:

    • Ask for component file path (e.g., src/​components/​ui/​Button/​Button.tsx)
    • Read component file to extract:
      • Component name
      • Props interface/​types
      • Event handlers
      • Component role (button, input, form, etc.)
    • Determine test location: {{COMPONENT_DIR}}/​__tests__/​{{COMPONENT_NAME}}.test.tsx
  2. Analyze component structure:

    • Extract prop names and types from TypeScript interface
    • Identify event handlers (onClick, onChange, onSubmit, etc.)
    • Determine accessibility role (button, textbox, combobox, etc.)
    • Identify state variations (disabled, loading, error, etc.)
    • Check for conditional rendering
  3. Generate test file:

    • Read template: .claude/​skills/​jest-test-scaffolder/​templates/​component.test.tsx.tpl
    • Replace placeholders:
      • {{COMPONENT_NAME}} - Component name (PascalCase)
      • {{COMPONENT_PATH}} - Relative import path
      • {{COMPONENT_ROLE}} - Accessibility role (button, textbox, etc.)
      • {{DEFAULT_PROPS}} - Default props for rendering
      • {{EVENT_HANDLERS}} - Event handler tests
      • {{STATE_TESTS}} - State variation tests (disabled, loading, etc.)
    • Write to: {{COMPONENT_DIR}}/​__tests__/​{{COMPONENT_NAME}}.test.tsx
  4. Include comprehensive test scenarios:

    • ✅ Render Test: Component renders without errors
    • ✅ Props Test: Component accepts and displays props correctly
    • ✅ Interaction Test: User interactions trigger expected behavior
    • ✅ State Test: Component handles state changes (disabled, loading, etc.)
    • ✅ Accessibility Test: Component is accessible (role, labels)
    • ⚠️ Edge Cases: Empty props, long text, null values (TODO placeholders)
    • ⚠️ Snapshot Test: Visual regression (TODO placeholder)
  5. Use React Testing Library best practices:

    • Use screen queries (getByRole, getByText, getByLabelText)
    • Use userEvent for realistic interactions
    • Use jest.fn() for Jest mocks
    • Avoid implementation details (no enzyme shallow rendering)
    • Test accessibility (roles, labels, keyboard navigation)
  6. Report success:

    • Show test file path
    • Display test coverage (number of test cases)
    • Provide command to run tests: yarn test {{COMPONENT_NAME}}
    • Remind user to add edge case tests

For React Hooks

When testing custom React hooks:

  1. Use template: .claude/​skills/​jest-test-scaffolder/​templates/​hook.test.tsx.tpl
  2. Use @testing-library/​react renderHook:
    import { renderHook, act } from "@testing-library/​react";
    import { useCustomHook } from "./​useCustomHook";
    
  3. Test hook behavior:
    • Initial state
    • State updates via act()
    • Return values
    • Side effects

Template Structure

import { render, screen } from '@testing-library/​react';
import userEvent from '@testing-library/​user-event';
import { jest } from '@jest/​globals';
import { {{COMPONENT_NAME}} } from './​{{COMPONENT_NAME}}';

describe('{{COMPONENT_NAME}}', () => {
  it('renders without errors', () => {
    render(<{{COMPONENT_NAME}} {{DEFAULT_PROPS}} />);
    expect(screen.getByRole('{{ROLE}}')).toBeInTheDocument();
  });

  it('handles user interactions', async () => {
    const user = userEvent.setup();
    const mock{{HANDLER}} = jest.fn();
    render(<{{COMPONENT_NAME}} on{{HANDLER}}={mock{{HANDLER}}} />);

    await user.click(screen.getByRole('{{ROLE}}'));
    expect(mock{{HANDLER}}).toHaveBeenCalledTimes(1);
  });

  it('handles disabled state', async () => {
    const user = userEvent.setup();
    const mockHandler = jest.fn();
    render(<{{COMPONENT_NAME}} disabled on{{HANDLER}}={mockHandler} />);

    const element = screen.getByRole('{{ROLE}}');
    expect(element).toBeDisabled();

    await user.click(element);
    expect(mockHandler).not.toHaveBeenCalled();
  });

  // TODO: Add accessibility tests
  // TODO: Add snapshot tests
  // TODO: Add edge case tests (empty props, long text, null values)
});

Example Usage

User: "Create tests for the Button component"

Claude (using jest-test-scaffolder):
1. Reads src/​components/​ui/​Button/​Button.tsx
2. Extracts props: { children, onClick, disabled, variant, size }
3. Generates src/​components/​ui/​Button/​__tests__/​Button.test.tsx
4. Creates 5 test cases:
   - Renders with correct text
   - Calls onClick handler when clicked
   - Is disabled when disabled prop is true
   - Renders correct variant styles (TODO)
   - Handles different sizes (TODO)

Files created:
- src/​components/​ui/​Button/​__tests__/​Button.test.tsx (42 lines, 3 complete tests, 2 TODO tests)

Run tests:
yarn test Button

Test coverage:
✅ Render test
✅ Click interaction test
✅ Disabled state test
⚠️ Variant test (TODO)
⚠️ Size test (TODO)

Pattern Matching

This skill follows the existing test pattern from:

  • src/​components/​ui/​Button/​__tests__/​Button.test.tsx (36 lines, 3 tests)
  • Uses describe and it blocks
  • Uses screen.getByRole for queries
  • Uses userEvent.setup() and await user.click()
  • Uses jest.fn() for Jest mocks
  • Tests rendering, interactions, and state

Best Practices

  1. Test user behavior, not implementation:

    • Query by role, label, text (user-visible)
    • Avoid querying by class names or test IDs (unless necessary)
    • Test what users see and do
  2. Use userEvent over fireEvent:

    • More realistic user interactions
    • Handles complex interactions (hover, tab, type)
    • Follows browser behavior
  3. Keep tests simple and focused:

    • One assertion per test (when possible)
    • Clear test descriptions
    • Avoid complex setup
  4. Test accessibility:

    • Use semantic roles
    • Verify labels and descriptions
    • Test keyboard navigation
  5. Mock external dependencies:

    • Mock API calls
    • Mock context providers
    • Mock navigation (useNavigate, useRouter)

Jest vs Vitest

This skill uses Jest (not Vitest):

  • jest.fn() instead of vi.fn()
  • jest.mock() instead of vi.mock()
  • jest.spyOn() instead of vi.spyOn()
  • Everything else is the same (React Testing Library patterns)

When NOT to Use This Skill

  • ❌ E2E tests → Use webapp-testing skill (Playwright)
  • ❌ Integration tests → Use api-integration-test-scaffolder
  • ❌ Backend tests → Use pytest-test-scaffolder
  • ❌ Storybook stories → Use storybook-scaffolder

More skills from mattnigh

spring-framework-patterns logo
mattnigh/skills_collection

spring-framework-patterns

Comprehensive Spring Framework and Spring Boot best practices including dependency injection patterns, bean lifecycle and scopes, REST API development, Spring Data JPA, service layer design, Spring Security, testing strategies, caching, AOP, async processing, error handling, and common anti-patte...

24 0
View

TypeScript厳格モードによる型安全性設計を専門とするスキル。 📖 参照書籍: - 『Effective TypeScript』(Dan Vanderkam): 型設計 📚 リソース参照: - `resources/Level1_basics.md`: レベル1の基礎ガイド - `resources/Level2_intermediate.md`: レベル2の実務ガイド - `resources/Level3_advanced.md`: レベル3の応用ガイド - `resources/Level4_expert.md`: レベル4の専門ガイド - `resources/di...

24 0
View
deploying-cloud-k8s logo
mattnigh/skills_collection

deploying-cloud-k8s

Deploys applications to cloud Kubernetes (AKS/GKE/DOKS) with CI/CD pipelines. Use when deploying to production, setting up GitHub Actions, troubleshooting deployments. Covers build-time vs runtime vars, architecture matching, and battle-tested debugging.

24 0
View
moai-alfred-agent-guide logo
mattnigh/skills_collection

moai-alfred-agent-guide

19-agent team structure, decision trees for agent selection, Haiku vs Sonnet model selection, and agent collaboration principles. Use when deciding which sub-agent to invoke, understanding team responsibilities, or learning multi-agent orchestration.

24 0
View
mermaid-diagram-generator logo
mattnigh/skills_collection

mermaid-diagram-generator

Converts architecture descriptions, module specs, or workflow docs into Mermaid diagrams. Use when visualizing brick module relationships, workflows (DDD, investigation), or system architecture. Supports: flowcharts, sequence diagrams, class diagrams, state machines, entity relationship diagrams,...

24 0
View
pre-flight-check logo
mattnigh/skills_collection

pre-flight-check

INVOKE FIRST before any code work. Validates git workflow (branch, issue, worklog) and checks approach. Use at START of every task and END before completing. Prevents skipped steps.

24 0
View
browser-dev-tools logo
mattnigh/skills_collection

browser-dev-tools

This skill should be used when working with browser-rendered artifacts (i.e. Bun, React/React Native) to proactively validate that development work on localhost is being built appropriately and to support debugging browser-rendered content. Use this skill after making frontend changes to verify t...

24 0
View
lead-dev logo
mattnigh/skills_collection

lead-dev

Lead Développeur - Coordination technique opérationnelle, code review, mentoring et livraison. Pair de web-dev-process au niveau OPÉRATIONS.

24 0
View
worker-monitor logo
mattnigh/skills_collection

worker-monitor

Monitor Docker workers, RQ queue health, and auto-scale workers (max 4). Use when: checking job progress, monitoring queue depth, scaling workers up/down, diagnosing slow processing, or waiting for jobs to complete. Referenced by data-quality skill during reprocessing.

24 0
View
quality-advisor logo
mattnigh/skills_collection

quality-advisor

Proactive quality guidance system that monitors artifact creation and provides real-time feedback on documentation quality

24 0
View
bump-version logo
mattnigh/skills_collection

bump-version

This skill should be used when the user wants to bump the version number in the workspace. It updates versions across all pyproject.toml files (root, tde, and tda packages) and the CHANGELOG.md to keep them synchronized.

24 0
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View