Búsqueda de sitios web

jestjs - Jest con TypeScript y módulos ES no puede importar "importaciones nombradas" desde módulos commonjs


Usando TS, los exports de módulos CJS se pueden importar con una sintaxis como si fueran exports nombrados de módulos ES, por ejemplo:

import { sync } from 'glob';

Sin embargo, con Jest y los módulos ES, cuando este estilo de importación está en un archivo de prueba o en una dependencia de un archivo de prueba, dice SyntaxError: The requested module 'glob' does not provide an export named 'sync'.

Revisar todos uno por uno y cambiarlos a import glob from 'glob'; y luego llamar a glob.sync() parece funcionar; sin embargo, al migrar algunas cosas antiguas de otro ejecutor de pruebas a Jest, esto puede no ser una opción, porque hay muchas de esas importaciones en la base de código.

Reproducido aquí: https://github.com/themaskedavenger/tsjestcjerepro

Ejecutando jest con: node --experimental-vm-modules node_modules/jest/bin/jest.js (como se describe en https://jestjs.io/docs/ecmascript-modules), y usando la configuración de 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",
      }
    },
  }

¿Hay alguna manera de evitar esto, para que import { whatever } from 'whatever'; funcione para módulos CJS en archivos de prueba de jest?

Artículos relacionados