Estoy tratando de escribir una prueba de broma simple para un paquete de terceros que solo exporta un módulo ES. Es un contenedor alrededor de un servidor http
.
Aquí hay un repositorio de prueba que configuré (simplemente ejecute yarn && yarn jest
para reproducir): https://github.com/jamesopti/hocuspocus-testing
No importa con qué configuración experimente, sigo recibiendo este error cuando intento ejecutarlo:
Must use import to load ES Module: /Users/j/hocuspocus-testing/node_modules/@hocuspocus/server/dist/hocuspocus-server.esm.js > 1 | import { Server, Hocuspocus } from '@hocuspocus/server' | ^ 2 | import * as request from 'supertest' 3 | 4 | describe('Server (e2e)', () => {
Cosas que ya he probado:
Las instrucciones de Jest sobre módulos ES: https://jestjs.io/docs/ecmascript-modules
En la configuración de Jest usando transformIgnorePatterns
transformIgnorePatterns: ['node_modules/(?!@hocuspocus/)']
Uso de Babel a través babel-jest
modificando la configuración de transformación en la configuración de Jest como '^.+\.jsx?$': 'babel-jest', '^.+\.tsx?$': 'ts-jest'
Se encontró con el error You appear to be using a native ECMAScript module configuration file, which is only supported when running Babel asynchronously.
Usar .babel.config.js en lugar de .babelrc.js
¿Alguna idea de lo que me estoy perdiendo aquí? Pensé que esto sería sencillo
[EDITAR 1] - Se tsconfig.json
y un archivo src/index.ts
en funcionamiento al repositorio de ejemplo .
No tiene un archivo tsconfig.json
que especifique module
. Por lo tanto, usa el valor predeterminado, donde transpila todos sus módulos a la sintaxis CommonJS
, que usa require
.
Si realmente observa su dist/hocuspocus-server.esm.js
, debería verlo usando require
sobre la sintaxis de importación de ESM.
Entonces, para cualquiera que todavía esté en esto, la configuración de ESM se explica en esta sección de documentación:
https://kulshekhar.github.io/ts-jest/docs/guides/esm-support
{ // [...] "jest": { "extensionsToTreatAsEsm": [".ts"], "globals": { "ts-jest": { "useESM": true } } } }
Estaba teniendo el mismo problema con mi aplicación esbelta y las pruebas. Finalmente lo rastreé para tener un jest.config.js
y un jest.config.json
en mi carpeta raíz. Parece que jest no tiene una resolución de archivo de configuración automática y estaba usando una configuración predeterminada en lugar de cualquiera de mis configuraciones especificadas.