ts-jest para TypeScript: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es ts-jest y para qué sirve?

\n\n

ts-jest es un preprocesador de TypeScript para el popular framework de pruebas Jest. Permite ejecutar pruebas escritas en TypeScript sin necesidad de compilación previa a JavaScript. La biblioteca transforma automáticamente el código TypeScript a JavaScript durante la ejecución de las pruebas, utilizando el compilador integrado de TypeScript.

\n\n

El objetivo principal de ts-jest es proporcionar una integración perfecta de TypeScript con Jest. Sin él, sería necesario configurar manualmente la compilación de TypeScript antes de cada ejecución de pruebas o utilizar herramientas adicionales como ts-node. ts-jest hace que este proceso sea transparente y automático.

\n\n

Ventajas clave de usar ts-jest:

\n
    \n
  • Compilación automática — los archivos TypeScript se compilan "sobre la marcha" durante las pruebas
  • \n
  • Soporte completo de TypeScript — todas las características del lenguaje (decoradores, genéricos, tipos) funcionan correctamente
  • \n
  • Source maps — cuando hay errores, ves el código TypeScript original, no el JavaScript compilado
  • \n
  • Rendimiento — ts-jest almacena en caché los resultados de la compilación, lo que acelera las ejecuciones repetidas
  • \n
  • Flexibilidad — se pueden configurar los parámetros del compilador TypeScript a través de la configuración de Jest
  • \n
\n\n

Instalación de ts-jest

\n\n

Para trabajar con ts-jest necesitas Node.js (versión 14 o superior) y un gestor de paquetes npm o yarn. La instalación se realiza con un solo comando:

\n\n
npm install --save-dev jest typescript ts-jest @types/jest
\n\n

O mediante yarn:

\n\n
yarn add --dev jest typescript ts-jest @types/jest
\n\n

Explicación de los paquetes:

\n
    \n
  • jest — el propio framework de pruebas
  • \n
  • typescript — el compilador de TypeScript
  • \n
  • ts-jest — el preprocesador para la integración
  • \n
  • @types/jest — tipos TypeScript para Jest (para autocompletado y verificación de tipos)
  • \n
\n\n

Después de la instalación, debes crear o actualizar el archivo jest.config.js (o jest.config.ts):

\n\n
// jest.config.js\nmodule.exports = {\n  preset: 'ts-jest',\n  testEnvironment: 'node',\n  roots: ['<rootDir>/src'],\n  testMatch: ['**/__tests__/**/*.ts?(x)', '**/?(*.)+(spec|test).ts?(x)'],\n  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node']\n};
\n\n

Asegúrate también de que en tsconfig.json estén configurados los parámetros correctos:

\n\n
{\n  "compilerOptions": {\n    "target": "ES2020",\n    "module": "commonjs",\n    "strict": true,\n    "esModuleInterop": true,\n    "skipLibCheck": true,\n    "forceConsistentCasingInFileNames": true,\n    "outDir": "./dist",\n    "rootDir": "./src",\n    "declaration": true,\n    "sourceMap": true\n  },\n  "include": ["src/**/*"],\n  "exclude": ["node_modules", "dist", "**/*.test.ts"]\n}
\n\n

Inicio rápido con ejemplo de código

\n\n

Creemos una función simple y una prueba para ella. Estructura del proyecto:

\n\n
my-project/\n├── src/\n│   ├── math.ts\n│   └── __tests__/\n│       └── math.test.ts\n├── jest.config.js\n├── tsconfig.json\n└── package.json
\n\n

Archivo: src/math.ts

\n\n
export function add(a: number, b: number): number {\n  return a + b;\n}\n\nexport function subtract(a: number, b: number): number {\n  return a - b;\n}\n\nexport function multiply(a: number, b: number): number {\n  return a * b;\n}\n\nexport function divide(a: number, b: number): number {\n  if (b === 0) {\n    throw new Error('Division by zero');\n  }\n  return a / b;\n}
\n\n

Archivo: src/__tests__/math.test.ts

\n\n
import { add, subtract, multiply, divide } from '../math';\n\ndescribe('Math functions', () => {\n  test('adds 1 + 2 to equal 3', () => {\n    expect(add(1, 2)).toBe(3)                    

Recommendations