Esta configuración está diseñada para Node.js con "type": "module", donde las importaciones de TypeScript requieren extensión .js y Jest requiere banderas ESM.
Documentación: Jest ESM Support | ts-jest ESM
Instalamos las dependencias necesarias. ts-jest es el transformador que permite a Jest entender TypeScript.
npm install -D jest @types/jest ts-jest supertest @types/supertestEjecuta el asistente de configuración. Nota: Responde "Yes" cuando pregunte si quieres usar TypeScript.
npx create-jestEl archivo generado por defecto no funciona bien con módulos nativos ES. Reemplaza todo el contenido de jest.config.js (o .ts si elegiste esa opción) con esto.
Esta configuración hace tres cosas vitales:
- Activa el modo ESM de
ts-jest. - Trata los archivos
.tscomo módulos ES. - Mapea las importaciones
.jsa archivos.ts(obligatorio en TypeScript moderno).
/** @type {import('ts-jest').JestConfigWithTsJest} */
export default {
preset: 'ts-jest/presets/default-esm', // Usa el preset específico para ESM
testEnvironment: 'node',
extensionsToTreatAsEsm: ['.ts'],
moduleNameMapper: {
// Convierte imports como: import x from './algo.js' -> busca './algo.ts'
'^(\\.{1,2}/.*)\\.js$': '$1',
},
transform: {
// Configuración específica para pasar flags a ts-jest
'^.+\\.tsx?$': [
'ts-jest',
{
useESM: true,
},
],
},
};Jest necesita permiso para usar la API de módulos de Node. Debemos pasar la bandera --experimental-vm-modules.
"scripts": {
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch",
"test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --coverage"
}Ejecuta este comando en tu terminal para instalar la librería que "traduce" estas variables entre sistemas operativos:
npm install -D cross-env
Para evitar error al usar variable de entorno NODE_OPTIONS en windows se cambia lo anterior por este script
"test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest",
"test:watch": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --watch",
"test:coverage": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage",Error: "SyntaxError: Cannot use import statement outside a module"
- Causa: Jest está intentando leer el archivo como CommonJS.
- Solución: Asegúrate de que tu
package.jsontenga"type": "module"y que hayas copiado el scriptNODE_OPTIONScorrectamente.
Error en Windows con los scripts
Si la terminal de Windows no reconoce NODE_OPTIONS, instala cross-env:
npm i -D cross-env- Modifica el script:
"test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest"
Actualizacion jest