spencerpauly/awesome-cursor-skills

writing-tests

Analyze existing code and write comprehensive unit and integration tests for it.

Ver código fuente

Cómo usar

  1. Copia el comando y revisa el paquete antes de instalarlo en tu entorno de agente.
  2. Consulta las herramientas, credenciales y entornos necesarios en el documento original.
  3. Describe las entradas y el resultado deseado; contrasta la salida con las fuentes.
npx skills add https://github.com/spencerpauly/awesome-cursor-skills --skill writing-tests

Antes de empezar

  • La instalación no incluye suscripción al modelo, cuota API ni permisos sobre tus archivos.
  • Las estrellas e instalaciones reflejan actividad, no una prueba independiente de calidad o seguridad.
Documento original del Skill

Contenido del repositorio de origen con títulos, ejemplos, código, tablas, enlaces e imágenes preservados.

Writing Tests

Use this skill when the user asks to add tests to existing code, improve test coverage, or write tests for a specific file or module.

Steps

  1. Detect the test setup — check what's already configured:
bash
   # Check package.json for test runner
   cat package.json | grep -E "jest|vitest|mocha|playwright|cypress"

Look for config files: vitest.config.ts, jest.config.ts, playwright.config.ts, .mocharc.*. Check for existing test files to understand the project's test patterns and conventions.

  1. If no test runner exists — set one up:
bash
   npm install -D vitest @testing-library/react @testing-library/jest-dom

Add a test script to package.json:

json
   { "test": "vitest run", "test:watch": "vitest" }
  1. Analyze the target code — read the file(s) to test and identify:
  • Public API: exported functions, classes, components, hooks
  • Code paths: conditionals, error handling, edge cases
  • Dependencies: external services, databases, APIs that need mocking
  • Side effects: file I/O, network calls, DOM mutations
  1. Create the test file — place it next to the source file or in a __tests__/ directory, matching the project's convention:
  • src/utils/format.ts → src/utils/format.test.ts
  • src/components/Button.tsx → src/components/Button.test.tsx
  1. Write tests following this structure:
ts
   import { describe, it, expect, vi } from "vitest";

   describe("functionName", () => {
     // Happy path
     it("returns formatted output for valid input", () => { ... });

     // Edge cases
     it("handles empty string", () => { ... });
     it("handles null/undefined input", () => { ... });

     // Error cases
     it("throws on invalid argument", () => { ... });

     // Boundary conditions
     it("handles maximum length input", () => { ... });
   });
  1. Mock external dependencies — don't make real API calls or database queries in unit tests:
ts
   vi.mock("@/lib/db", () => ({
     query: vi.fn().mockResolvedValue([{ id: 1, name: "test" }]),
   }));

For React components, mock hooks that fetch data:

ts
   vi.mock("@/hooks/useUser", () => ({
     useUser: () => ({ user: { name: "Test" }, isLoading: false }),
   }));
  1. Test React components with Testing Library:
tsx
   import { render, screen, fireEvent } from "@testing-library/react";

   it("renders the button and handles click", () => {
     const onClick = vi.fn();
     render(<Button onClick={onClick}>Click me</Button>);
     fireEvent.click(screen.getByRole("button", { name: "Click me" }));
     expect(onClick).toHaveBeenCalledOnce();
   });
  1. Run the tests and verify they pass:
bash
   npm test

If any fail, fix the test or the code (depending on whether the test expectation or the implementation is wrong).

What to Test

  • Always test: public API, error handling, edge cases (empty, null, zero, negative), state transitions, async behavior
  • Skip testing: private implementation details, third-party library internals, simple getters/setters, type-only code

Notes

  • Match the project's existing test style — if they use test() instead of it(), follow that.
  • Don't test implementation details — test behavior and outputs, not internal method calls.
  • Use descriptive test names that explain the scenario: "returns 0 when cart is empty" not "test1".
  • One assertion concept per test — multiple expect calls are fine if they verify the same behavior.
  • For async code, always await the result or use resolves/rejects matchers.

Relacionados por tarea

del mismo repositorio

Más Skills

Todos los Skills