javascript - Hur får man ts-jest att fungera med import/export-syntaxen för de js-filer som importeras i mina imports?
jest kan inte importera importen av min import, vilket gör att kommandot npm run test misslyckas med SyntaxError: Unexpected token 'export' på första raden i min bar.ts-fil. För detta exempel är foo.js en lokal fil, inte ett nodmodul. Jag kan ändra foo.js till foo.ts och ändra importen i bar.ts, men det är inte lösningen.
Filer i min src-mapp:
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);
});
Filer i root-mappen:
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"]
}
Svar #1
Så problemet är att både ts-jest och jest är svåra att ställa in för ES6 import/export-syntaxen. Jag gjorde precis det genom att:
- Installera både
jestochts-jest>= 27.0.0 versioner. - Med denna minimala konfiguration:
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)/)'
]
}
