Skip to content

Instantly share code, notes, and snippets.

@tbolis
Forked from rstacruz/README.md
Created November 12, 2021 14:49
Show Gist options
  • Save tbolis/941f5fa3289eff45266dcb8ffc48a09c to your computer and use it in GitHub Desktop.
Save tbolis/941f5fa3289eff45266dcb8ffc48a09c to your computer and use it in GitHub Desktop.
Setting up Jest with ESM

Setting up Jest with ESM

Here are some different ways on how to set up Jest to support ESM. This applies for Jest v25, Node v13, and Babel v7.

Method A: Native Node.js support

Node v14 and Jest v26 support ESM natively with the --experimental-vm-modules flag.

Install cross-env:

yarn add --dev cross-env

Add 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

Method B: Using Babel

Add babel-jest.

yarn add --dev @babel/core @babel/plugin-transform-modules-commonjs babel-jest

Configure 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.

Method C: Using jest-esm-transformer

Add jest-esm-transformer - this is a preset configuration of Babel to support ESM transpilation.

yarn add --dev jest-esm-transformer

Configure Jest.

// jest.config.js
module.exports = {
  "transform": {
    "\\.m?jsx?$": "jest-esm-transformer"
  },
};

You're done.

Method D: Using standard-things/esm

As of March 2020, using esm is currently not possible. Follow these threads for details.

Method E: Using buble

See buble-jest.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment