Test Generator
Esta habilidad genera pruebas unitarias Vitest para un archivo específico o pruebas E2E con Playwright para un flujo de usuario. Analiza el código y las convenciones existentes para crear casos de prueba relevantes.

Qué hace
Genera pruebas de software. Para una ruta de archivo dada, produce pruebas unitarias Vitest, analizando exportaciones, dependencias y patrones de prueba existentes para asegurar la cobertura. Si se invoca con e2e y una descripción del flujo, genera pruebas de extremo a extremo (E2E) con Playwright, identificando flujos de usuario críticos y la estructura de la aplicación.
Cuándo usarlo
Usa esta habilidad cuando necesites agregar rápidamente pruebas unitarias a archivos nuevos o existentes, o para crear pruebas E2E completas para flujos de usuario en tu aplicación. Te ayuda a garantizar la calidad del código y a verificar el comportamiento de la aplicación en varios escenarios.
Cómo configurarlo
Primero, copia la definición de esta habilidad a .claude/skills/test-gen/SKILL.md en tu repositorio. Para generar pruebas unitarias Vitest para un archivo, invócala con /test-gen [ruta-del-archivo], por ejemplo, /test-gen src/utils/math.ts. Para generar pruebas E2E con Playwright para un flujo de usuario, usa /test-gen e2e [descripción del flujo], por ejemplo, /test-gen e2e flujo de inicio de sesión.
El contenido
Test Generator
Generate tests for the given target.
Mode selection: If $0 is the literal token e2e, skip to the
E2E Mode (Playwright) section at the bottom. Otherwise generate Vitest
unit tests for the file per Steps 1–7 below.
Target: $ARGUMENTS
Test framework: !cat package.json 2>/dev/null | grep -o '"vitest"' | head -1 || echo "vitest not found"
Existing tests: !find src -name "*.test.ts" -o -name "*.test.tsx" -o -name "*.spec.ts" -o -name "*.spec.tsx" 2>/dev/null | head -10 || echo "none found"
Step 1: Analyze the Target File
Read $ARGUMENTS and extract:
- All exported functions, classes, components, and types
- Dependencies and imports (what needs mocking)
- Side effects (API calls, database queries, file system access)
- Input parameter types and return types
Step 2: Check for Existing Tests
Search for existing test files:
<filename>.test.ts/<filename>.test.tsx<filename>.spec.ts/<filename>.spec.tsx__tests__/<filename>.ts
If tests exist, read them and only add missing coverage. Do NOT duplicate existing test cases.
Step 3: Identify Test Cases
For each export, determine:
| Category | What to test |
|---|---|
| Happy path | Normal input produces expected output |
| Edge cases | Empty input, null/undefined, boundary values |
| Error paths | Invalid input, thrown errors, rejected promises |
| Async | Promise resolution/rejection, timeout behavior |
| Dependencies | Mock external calls (API, DB, third-party libs) |
Step 4: Follow Existing Conventions
If existing test files were found in Step 2, match their:
- Import style (
import { describe } from 'vitest'vs global) - Mock patterns (
vi.mock,vi.fn,vi.spyOn) - File naming convention (
.test.tsvs.spec.ts) - Describe/it block structure
- Assertion style (
expect().toBe(),expect().toEqual())
If no existing tests, use this default structure:
import { describe, it, expect, vi, beforeEach } from 'vitest';
Step 5: Generate Tests
Write the test file next to the source file (e.g., src/utils/calc.ts -> src/utils/calc.test.ts).
Rules:
- One
describeblock per exported function/component - Descriptive test names:
it('returns empty array when input is empty') - Arrange-Act-Assert pattern in each test
- Mock external dependencies, never call real APIs/DB
- Test the public interface, not implementation details
- For React components: use
@testing-library/reactif available, otherwise test logic only
Step 6: Verify
Run the generated tests:
npx vitest run <test-file-path> --reporter=verbose
If tests fail:
- Read the error output
- Fix the test (not the source code)
- Re-run until all pass
Step 7: Summary
Output:
- Number of test cases generated
- Coverage areas: happy path, edge cases, error paths
- Any exports that were NOT tested (and why)
- Test run result: PASS / FAIL
E2E Mode (Playwright)
Invoked as /test-gen e2e [flow description]. The remaining arguments after
e2e describe the user flow to test (e.g. /test-gen e2e login flow). If no
flow is given, generate tests for all critical paths (priority below).
E2E Step 1: Understand the Application
Identify:
- Routing setup (Next
app/routes or react-router config) - Authentication flow (login page, auth guards)
- Main user-facing pages, form components and their validation
- API calls made during user flows
cat package.json | grep -o '"@playwright/test"' || echo "Playwright not installed"
ls playwright.config.* 2>/dev/null || echo "No Playwright config"
ls e2e/ tests/e2e/ tests/ 2>/dev/null | head -20
If Playwright is not installed:
npm install -D @playwright/test && npx playwright install chromium
E2E Step 2: Identify Critical User Flows
If no specific flow requested, prioritize:
- Authentication — sign up, login, logout, password reset
- Core CRUD — create, read, update, delete main entities
- Navigation — landing page → key features → back
- Error states — invalid form submission, 404 pages, unauthorized access
- Payment/checkout — if applicable
E2E Step 3: Analyze Page Structure
For each page: read the component file, identify interactive elements,
find data-testid attributes or accessible roles, trace triggered API
calls, identify loading/success/error states.
E2E Step 4: Generate Tests
Create test files in the project's E2E directory (usually e2e/ or
tests/e2e/). Follow Playwright best practices:
- Prefer accessible selectors:
page.getByRole(),page.getByText(),page.getByTestId() page.waitForURL()for navigation,expect(page).toHaveURL()for route verificationawait expect(locator).toBeVisible()overwaitForSelector- Group related tests in
test.describe()blocks test.beforeEach()for common setup (login, navigation)- If a
storageStateauth fixture exists, use it for authenticated flows; otherwise log in via UI inbeforeEach
Each test must assert meaningfully: URL changed, expected content visible, form feedback shown, data persists after reload where applicable.
E2E Step 5: Verify
npx playwright test <test-file> --reporter=list 2>&1
If tests fail: read the error output, fix the test (selectors, timing, assertions), re-run until passing.
E2E Step 6: Summary
Output:
- Files generated and flows covered
- Selector breakdown (roles / test IDs / text)
- Test run result: PASS / FAIL / SKIP with reasons
- Missing coverage and recommended
data-testidadditions
Viene directamente del framework con el que se construye este sitio. Esta página muestra siempre la versión actual.
¿Quieres algo así para ti?
Empieza con una conversación: 30 minutos, sin compromiso.