#typescript #jestjs #es6-modules #ts-jest #babel-jest
Вопрос:
Используя TS, экспорт из модулей CJS может быть импортирован с синтаксисом, как если бы они назывались экспортом модулей ES, например:
import { sync } from 'glob';
Однако в модулях Jest и ES, когда этот стиль импорта находится в тестовом файле или в зависимости от тестового файла, он говорит SyntaxError: The requested module 'glob' does not provide an export named 'sync'
.
Просмотр всех по одному и изменение их на import glob from 'glob';
, а затем вызов glob.sync()
, кажется, работает, однако при переносе некоторых устаревших материалов с другого тестового запуска в шутку это может быть не вариант, потому что в кодовой базе много таких импортных файлов.
Воспроизведено здесь: https://github.com/themaskedavenger/tsjestcjerepro
Запуск шутки с: node --experimental-vm-modules node_modules/jest/bin/jest.js
(как описано в https://jestjs.io/docs/ecmascript-modules), и используя конфигурацию Jest:
resetMocks: true,
testEnvironment: "node",
testMatch: [
"**/src/**/*.(spec|test).[tj]s?(x)"
],
preset: 'ts-jest/presets/default-esm',
transform: {},
'extensionsToTreatAsEsm': [".ts", ".tsx"],
globals: {
'ts-jest': {
useESM: true,
tsconfig: {
allowSyntheticDefaultImports: true,
declaration: true,
esModuleInterop: true,
jsx: "react",
lib: ["esnext"],
module: "es2020",
moduleResolution: "node",
outDir: "build",
sourceMap: true,
strictNullChecks: true,
target: "ES2020",
}
},
}
Есть ли способ обойти это, чтобы import { whatever } from 'whatever'
; работало для модулей CJS в тестовых файлах jest?
Комментарии:
1. вы когда-нибудь находили решение для этого?