Generador de Configuración de Jest

configuración de jest
Siguiente

Elige tu stack, TypeScript, React, backend de Node, Svelte, y el generador produce un jest.config.js con los transformadores, mapeo de módulos, entorno de prueba y umbrales de cobertura adecuados. Incluye todas las opciones que la gente olvida: moduleNameMapper para CSS/imágenes, setupFilesAfterEach, testPathIgnorePatterns para node_modules y dist.

Cómo construir una configuración de Jest

  1. 1

    Elige tu stack

    TypeScript, React, Vue, Svelte, Node puro, o una mezcla. Cada uno pre-llena los transformadores adecuados.

  2. 2

    Elige el entorno de prueba

    jsdom para código de navegador, node para backend, o entorno personalizado.

  3. 3

    Activa características

    Umbrales de cobertura, pruebas de instantáneas, rutas simuladas, archivos de configuración personalizados, patrones de ignorar transformaciones.

  4. 4

    Descarga la configuración

    La salida es un `jest.config.js` comentado o `jest.config.ts`, además de los scripts de npm que deberías agregar a `package.json`.

Salida de ejemplo: proyecto React + TypeScript

module.exports = {
  preset: "ts-jest",
  testEnvironment: "jsdom",
  setupFilesAfterEach: ["<rootDir>/jest.setup.ts"],
  moduleNameMapper: {
    "\\.(css|less|scss|sass)$": "identity-obj-proxy",
    "\\.(jpg|jpeg|png|gif|svg)$": "<rootDir>/__mocks__/fileMock.js",
    "^@/(.*)$": "<rootDir>/src/$1"
  },
  testPathIgnorePatterns: ["/node_modules/", "/dist/", "/build/"],
  transform: {
    "^.+\\.tsx?$": ["ts-jest", { tsconfig: "tsconfig.test.json" }]
  },
  collectCoverageFrom: [
    "src/**/*.{ts,tsx}",
    "!src/**/*.d.ts",
    "!src/**/*.stories.*"
  ],
  coverageThreshold: {
    global: { branches: 80, functions: 80, lines: 85, statements: 85 }
  }
};

Guía de decisiones: ¿qué entorno?

Tu código se ejecuta en… Usa
Navegador (DOM, ventana) jsdom (o @happy-dom/jest-environment para velocidad)
Servidor Node node
Trabajadores de servicio Entorno personalizado, base node
React Native Preset react-native

Hoja de trucos de transformadores

Tipo de fuente Transformador
TypeScript ts-jest o @swc/jest
JSX compilado por Babel babel-jest (predeterminado)
Vue SFC @vue/vue3-jest + babel-jest
Svelte svelte-jester
Imágenes estáticas Simulación manual en moduleNameMapper

Umbrales de cobertura: ¿qué números?

  • Ruta crítica / bibliotecas: 90%+ líneas, 85%+ ramas.
  • Equipos de características: 80% líneas, 70% ramas.
  • UI en cambio rápido: 60-70% líneas; apunta más alto para lógica de negocio, más bajo para diseño.
  • Prototipos: desactiva los umbrales por completo; rastrea la cobertura como un número, no como una puerta.

Errores comunes

  • Usar jsdom para código de Node puro. Pruebas más lentas y nada ganado, cambia a node.
  • Falta transformIgnorePatterns para paquetes ESM. Los paquetes modernos se envían solo en ESM; Jest necesita ser informado para transformarlos.
  • Simular imágenes / CSS sin un mapeador. Importa un .png en una prueba y Jest falla sin un módulo simulado.
  • Configurar clearMocks en falso. Las simulaciones se filtran entre pruebas y los fallos se vuelven no determinísticos. Actívalo por defecto.

Preguntas frecuentes

SWC (@swc/jest) es 10-20 veces más rápido que ts-jest porque omite la verificación de tipos completa dentro de Jest. Ejecuta la verificación de tipos por separado como tsc --noEmit en CI. Usa ts-jest cuando quieras que los errores de tipo fallen las pruebas; usa SWC por velocidad.

happy-dom es aproximadamente 2-3 veces más rápido que jsdom e implementa un gran subconjunto de las API del DOM. Falta en algunos casos extremos, así que si encuentras un error de “no implementado”, vuelve a jsdom.

Sí, si tus componentes importan archivos .css o .scss directamente. Mapea a identity-obj-proxy (para módulos CSS) o un pequeño stub vacío. Sin esto, tus pruebas fallarán en el momento de la importación.

Sí. Elige la opción de salida de TypeScript y el generador emite jest.config.ts. Jest 27+ carga automáticamente configuraciones .ts cuando ts-node está instalado.

Herramientas relacionadas

Herramienta disponible en otros idiomas