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:

  1. Installera både jest och ts-jest >= 27.0.0 versioner.
  2. 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)/)' 
    ]
}

Relaterade artiklar