Here are some different ways on how to set up Jest to support ESM. This applies for Jest v25, Node v13, and Babel v7.
Node v14 and Jest v26 support ESM natively with the --experimental-vm-modules flag.
Install cross-env:
yarn add --dev cross-envAdd NODE_OPTIONS to the scripts.test in package.json:
"scripts": {
"test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest"
}See tne Jest documentation for more info: https://jestjs.io/docs/ecmascript-modules
Add babel-jest.
yarn add --dev @babel/core @babel/plugin-transform-modules-commonjs babel-jestConfigure Babel. We'll use env.test here so not to interfere with your build process.
// babel.config.js
module.exports = {
env: {
test: {
plugins: ["@babel/plugin-transform-modules-commonjs"]
}
}
};Configure Jest:
// jest.config.js
module.exports = {
"transform": {
"^.+\\.[t|j]sx?$": "babel-jest"
},
};You're done.
Add jest-esm-transformer - this is a preset configuration of Babel to support ESM transpilation.
yarn add --dev jest-esm-transformerConfigure Jest.
// jest.config.js
module.exports = {
"transform": {
"\\.m?jsx?$": "jest-esm-transformer"
},
};You're done.
As of March 2020, using esm is currently not possible. Follow these threads for details.
See buble-jest.
The important thing for B,C and other transform based methods.
Jest doesn't transform
node_modulesby default so you need to modifytransformIgnorePatternsto include modules you want to be transformed. For example like this:Method E:
If you use ts-jest allow it to process js files as well.
And add
allowJs=trueto your tsconfig.json or tsconfig.spec.json.