¿Es posible probar módulos ES6 con Jest sin esm o babel ? Dado node v13 es compatible con es6 de forma nativa, he intentado:
//package.json { … "type": "module" … } //__tests__/a.js import Foo from '../src/Foo.js'; $ npx jest Jest encountered an unexpected token … Details: /home/node/xxx/__tests__/a.js:1 import Foo from '../src/Foo.js'; ^^^^^^ SyntaxError: Cannot use import statement outside a moduleCuando a Babel se le agrega un transpiler, funciona, pero ¿los módulos es6 también se pueden usar de forma nativa?
Sí, es posible desde jest@25.4.0 . A partir de esta versión, hay soporte nativo de esm, por lo que ya no tendrás que transpilar tu código con babel.
Todavía no está documentado, pero de acuerdo con este problema , debe realizar 3 pasos sencillos para lograrlo ( al momento de escribir esta respuesta ):
import configurando transform: {} en su archivo de configuración de bromanode@^12.16.0 || >=13.2.0 con --experimental-vm-modulesjest-environment-node o jest-environment-jsdom-sixteen .Entonces, su archivo de configuración de broma debe contener al menos esto:
export default { testEnvironment: 'jest-environment-node', transform: {} ... }; Y para establecer --experimental-vm-modules , deberá ejecutar Jest desde package.json de la siguiente manera ( espero que esto cambie en el futuro ):
"scripts": { "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js" }Espero que esta respuesta te haya sido útil.
Seguí los consejos proporcionados en la respuesta aceptada, pero agregué la propiedad "type": "module" en mi package.json para que la broma funcione correctamente. Esto es lo que hice:
En package.json :
"devDependencies": { "jest": "^26.1.0", "jest-environment-jsdom-sixteen": "^1.0.3", "jest-environment-node": "^26.1.0" }, "scripts": { "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js" }, "type": "module", "jest": { "transform": {}, "testEnvironment": "jest-environment-jsdom-sixteen" }Además de la respuesta de @Radovan Kuka, aquí se explica cómo ejecutar Jest con módulos ES, usando npx :
"test:monitoring": "npx --node-arg=--experimental-vm-modules jest -f monitoring.test.js --detectOpenHandles", El beneficio es que no es necesario proporcionar la ruta absoluta de node_modules .
Tenga en cuenta que esto aún es experimental, pero hemos documentado cómo probarlo, por lo que es de esperar que haya menos confusión.
https://jestjs.io/docs/en/ecmascript-modules
Los pasos en https://stackoverflow.com/a/61653104/1850276 son correctos