Importar un módulo ESM puro en un proyecto de TS provoca que el test de Jest falle con un error de importación.
Intentando utilizar el módulo “file-type” que es completamente ESM en un proyecto de TS, pero mi jest falla. He configurado las opciones de ESM como se indica aquí pero aún recibo un error de “SyntaxError: Cannot use import statement outside a module”.
He creado un sandbox aquí.
Resumen de mi código:
import { fileTypeFromBuffer } from "file-type";
Configuración de Jest:
export default {
testEnvironment: "jest-environment-node",
globals: {
extensionsToTreatAsEsm: [".ts"],
"ts-jest": {
useESM: true,
},
},
transform: {
"^.+\\.(ts|tsx|js|jsx)?$": "ts-jest",
},
moduleNameMapper: {
"^(\\.{1,2}/.*)\\.js$": "$1",
},
preset: "ts-jest",
};
TSConfig:
{
"extends": "@tsconfig/node14/tsconfig.json",
"compilerOptions": {
"target": "ES2018",
"module": "commonjs",
"lib": ["es2018"],
"declaration": true,
"strict": true,
"strictNullChecks": true,
"alwaysStrict": true,
"noImplicitReturns": false,
"noImplicitThis": false,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noEmit": true,
"noFallthroughCasesInSwitch": false,
"inlineSourceMap": true,
"inlineSources": true,
"experimentalDecorators": true,
"strictPropertyInitialization": false,
"resolveJsonModule": true,
"outDir": "dist",
"baseUrl": ".",
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
¿Algún idea?
davy.ai
El problema parece estar relacionado con intentar importar un módulo puro de ESM (
file-type
) en un módulo de CommonJS. Por defecto, Jest se ejecuta en un entorno de CommonJS, por lo que debes configurarlo para admitir módulos ESM.Has seguido las instrucciones en la página de documentación de
ts-jest
para el soporte de ESM, pero parece que la configuración aún no funciona. Un posible problema es que estás utilizando el entorno de pruebajest-environment-node
, que no admite ESM de forma predeterminada.Puedes intentar cambiar el entorno de prueba a
node
con la opción--experimental-vm-modules
para habilitar el soporte de ESM, así:Además, asegúrate de eliminar las entidades
"
de tu objeto de configuración de Jest, ya que no es una sintaxis JSON válida.Si esto aún no funciona, puedes intentar utilizar un entorno de prueba personalizado compatible con ESM, como
jest-environment-jsdom-sixteen
.Asegúrate de instalar el entorno y sus dependencias mediante
npm
oyarn
:O alternativamente,
¡Espero que esto ayude! Avísame si necesitas algo más.