16

How to test ES6 modules with Jest.


Example:

sum.js

const sum = function (a, b) {
  return a + b;
}

export default sum;

sum.test.js

import sum from './sum';

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});
Paulo Coghi
  • 13,724
  • 14
  • 68
  • 90

2 Answers2

33

The only requirement is to config your test environment to Babel, and add the es2015 transform plugin:


Step 1:

Add your test environment to .babelrc in the root of your project:

{
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-modules-commonjs"]
    }
  }
}

Step 2:

Install the es2015 transform plugin:

npm install --save-dev @babel/plugin-transform-modules-commonjs

And that's it. Jest will enable compilation from ES modules to CommonJS automatically, without having to inform additional options to your jest property inside package.json.

Paulo Coghi
  • 13,724
  • 14
  • 68
  • 90
  • 2
    this answer may be outdated, GarouDan's answer is the [officially suggested solution](https://jestjs.io/docs/en/getting-started#using-babel) – chantey Aug 16 '20 at 05:10
  • GarouDan's answer is not the officially suggested solution for ES6 modules but, instead, for Typescript scenarios. They are not the same thing. – Paulo Coghi Sep 22 '20 at 20:56
  • While GarouDan's solution includes typescript support, following the link I provided shows the well documented Jest ES6 implementation without typescript, from which GarouDan's solution is derived. The changes needed to support typescript are negligible, but I agree it is not relevent to the question. – chantey Sep 23 '20 at 21:18
3

The solutions above didn't work for me. I was able to solve with this:

yarn add --dev babel-jest @babel/core @babel/preset-env @babel/preset-typescript

babel.config.js

module.exports = {
    presets: [
        [
            '@babel/preset-env',
            {
                targets: {
                    node: 'current',
                },
            },
        ],
        '@babel/preset-typescript'
    ],
};

where I'm using typescript.

Reference.

GarouDan
  • 3,743
  • 9
  • 49
  • 75