Skip to content

Instantly share code, notes, and snippets.

@Klerith
Created August 19, 2023 18:35
Show Gist options
  • Select an option

  • Save Klerith/98d7b1bc0f1525e892f260813cad1007 to your computer and use it in GitHub Desktop.

Select an option

Save Klerith/98d7b1bc0f1525e892f260813cad1007 to your computer and use it in GitHub Desktop.
Note + TypeScript + Jest = Testing

Pasos para configurar Jest con TypeScript, en Node

Documentación oficial sobre Jest

  1. Instalaciones de desarrollo (super test es útil para probar Express)
npm install -D jest @types/jest ts-jest supertest
  1. Crear archivo de configuración de Jest
npx jest --init
  1. En el archivo jest.config.js configurar
preset: 'ts-jest',
testEnvironment: "jest-environment-node",

// Opcional - The paths to modules that run some code to configure or set up the testing environment before each test
// setupFiles: ['dotenv/config'],
  1. Crear scripts en el package.json
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage",
@cristianA123
Copy link

Captura de pantalla 2024-06-30 223211
Captura de pantalla 2024-06-30 223057

@AlejoDev95
Copy link

Dejo mi configuración para usar path aliases

import type { Config } from "jest";

const config: Config = {
  collectCoverage: true,
  coverageDirectory: "coverage",
  coverageProvider: "v8",
  moduleNameMapper: {
    "^@src/(.*)$": "<rootDir>/src/$1",
  },
  preset: "ts-jest",
  testEnvironment: "jest-environment-node",
  transform: {
    "^.+\\.(ts|tsx)$": "ts-jest",
  },
  moduleFileExtensions: ["ts", "tsx", "js", "json"],
};

export default config;
{
  "compilerOptions": {
    "target": "es2016",
    "module": "commonjs",
    "rootDir": ".",
    "baseUrl": ".",
    "paths": {
      "@src/*": ["src/*"]
    },
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*", "test/**/*"],
  "exclude": ["node_modules", "dist"]
}

Esto les permitira realizar importaciones como la siguiente

import { emailTemplate } from "@src/foundation/01_template";

describe("01_template", () => {
  it("should ", () => {
    const messageExpected = "Hi, ";
    expect(emailTemplate).toContain(messageExpected);
  });
});

@lautarodellamea
Copy link

Ahora es npx create-jest en vez de npx jest --init.

Saludos! excelente curso.

@cesarco
Copy link

cesarco commented Jul 25, 2025

Hola, he hecho algunos cambios útiles en tu Gist. Puedes verlos aquí:
https://gist.github.com/cesarco/98e42f6d8c4e53ee12ff465446108811
¡Gracias!

@moisesisaiaso
Copy link

moisesisaiaso commented Sep 14, 2025

Posibles errores con Jest + TypeScript

⚠️ ERROR: Problemas con import / export en jest.config.js

Cuando TypeScript no reconoce la sintaxis import y export en archivos como jest.config.ts, puede deberse a la propiedad "verbatimModuleSyntax" en el archivo tsconfig.json. Esta propiedad activa un modo estricto que prohíbe mezclar sintaxis de módulos CommonJS y ESModule.

✅ Solución

Comenta temporalmente esta línea en tsconfig.json:

// "verbatimModuleSyntax": true

Esto desactiva el modo estricto y permite usar tanto require/module.exports como import/export sin conflicto.

💡 Esta solución es útil durante el desarrollo y pruebas. Una vez que el proyecto se despliegue en producción, puedes volver a activarla si tus módulos están bien definidos.

⚠️ ERROR: TypeScript no reconoce la sintaxis de Jest

Este error aparece cuando el editor subraya funciones como describe, test o expect como si no existieran. Sin embargo, Jest funciona correctamente al ejecutar los tests, ya que este error solo afecta al tipado en tiempo de desarrollo.

✅ Causa

TypeScript no está detectando los tipos globales de Jest, posiblemente porque @types/jest no se está aplicando correctamente.

✅ Solución

  1. Crea un archivo llamado jest.setup.ts en la raíz del proyecto.
  2. Añade la siguiente línea al inicio:
/// <reference types="jest" />

Esto le indica explícitamente a TypeScript que debe incluir los tipos globales de Jest.

ℹ️ ¿Qué significa /// <reference types="..." />?

Es una directiva especial que le dice al compilador:

“Incluye los tipos globales de esta librería en este archivo.”

No es un comentario común, sino una instrucción que afecta el entorno de tipado.

✅ Actualiza tsconfig.json

Asegúrate de incluir el archivo de setup en la configuración:

"include": ["src", "tests", "jest.setup.ts"],
"exclude": ["node_modules", "dist"]

@riosbrian
Copy link

Si usan aliases, sigan la siguiente configuración:

tsconfig.json

"resolveJsonModule": true,
"esModuleInterop": true

jest.config.ts

import type { Config } from "jest";
import { pathsToModuleNameMapper } from "ts-jest";
import { compilerOptions } from "./tsconfig.json";

const config: Config = {
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, {
    prefix: "<rootDir>/",
  }),
// resto de la configuración de Fernando
}

Esto es porque en mi caso no uso como alias '@src', me gusta crear varios, por ejemplo '@modules' o '@config' dentro del source.

@carlos-suarez-payu-gpo
Copy link

El paso 2. se actualizo a este comando.

npm init jest@latest

Tomado de https://jestjs.io/docs/getting-started#generate-a-basic-configuration-file

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment