jest no puede importar la importación de mi importación, lo que hace que el comando de npm run test falle con SyntaxError: Unexpected token 'export' en la primera línea de mi archivo bar.ts Para este ejemplo foo.js es un archivo local, no un módulo de nodo. Puedo cambiar foo.js a foo.ts y cambiar la importación en bar.ts pero esa no es la solución.
Archivos en mi carpeta src :
foo.js : export const magicNumber = 42;bar.ts : import { magicNumber } from './foo.js'; export const secondMagicNumber = magicNumber / 2;bar.test.ts : import { secondMagicNumber } from './bar'; import assert from 'assert'; it('should work', function() { assert.strictEqual(secondMagicNumber, 21); });Archivos en la carpeta raíz :
jest.config.js : export default { preset: 'ts-jest', testEnvironment: 'node', };package.json : { "name": "testing-with-jest", "version": "1.0.0", "description": "", "scripts": { "test": "jest" }, "author": "", "license": "ISC", "devDependencies": { "@types/jest": "^26.0.20", "jest": "^26.6.3", "ts-jest": "^26.5.2", "typescript": "^4.2.2" }, "type": "module" }tsconfig.json : { "compilerOptions": { "target": "ESNext", "module": "ESNext", "outDir": "./dist", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "declaration": true, "moduleResolution": "node" }, "include": ["./src/**/*.ts"] }Entonces, el problema es que tanto ts-jest como jest son difíciles de configurar para la sintaxis de importación/exportación de ES6. Hice exactamente eso por:
jest y ts-jest >= 27.0.0. tsconfig.json :
{ "compilerOptions": { "esModuleInterop": true, "allowJs": true } } jest.config.ts :
export default { globals: { extensionsToTreatAsEsm: ['.ts', '.js'], 'ts-jest': { useESM: true } }, preset: 'ts-jest/presets/js-with-ts-esm', // from https://stackoverflow.com/a/57916712/15076557 transformIgnorePatterns: [ 'node_modules/(?!(module-that-needs-to-be-transformed)/)' ] }