Does Jest support ES6 import/export?

jest es6 import
jest unexpected token export
jest mock imported function
jest typescript
jest config
jest transform node_modules
syntaxerror: cannot use import statement outside a module
jest reporter

If I use import/export from ES6 then all my jest tests fail with error:

Unexpected reserved word

I convert my object under test to use old school IIFY syntax and suddenly my tests pass. Or, take an even simpler test case:

   var Validation = require('../src/components/validation/validation');//PASS
   //import * as Validation from '../src/components/validation/validation'//FAIL

Same error. Obviously there's a problem with import/export here. It's not practical for me to rewrite my code using ES5 syntax just to make my test framework happy.

I have babel-jest. I tried various suggestions from github issues. No go so far.

 "scripts": {
    "start": "webpack-dev-server",
    "test": "jest"
      "jest": {
        "testPathDirs": [
        "testPathIgnorePatterns": [
        "testFileExtensions": ["es6", "js"],
        "moduleFileExtensions": ["js", "json", "es6"]
  "presets": ["es2015", "react"],
  "plugins": ["transform-decorators-legacy"]

Is there a fix for this?

From my answer on another question, this can be simpler:

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.

Does Jest support ES6 import/export?, Right now Jest does not support test suites with import statement. What is urgent is to allow people to work with .mjs module, even if babel is  ts-jest does not recognize es6 imports. I'm adding typescript support to a react codebase, and while the app is working ok, jest tests are failing all over the place, apparently not recognizing something about es6 syntax. We're using ts-jest for this.

It's a matter of adding stage-0 to your .babelrc file. here is an example:

  "presets": ["es2015", "react", "stage-0"],
  "plugins": ["transform-decorators-legacy"]

Please consider adding native support for ES modules · Issue #4842 , add.js'; ^^^^^^ SyntaxError: Unexpected token export 1 | import React, In its next release esm will support being used as a Jest transform so  Does Jest support ES6 import/export? (3) If I use import/export from ES6 then all my jest tests fail with error: Unexpected reserved word. I convert my object under test to use old school IIFY syntax and suddenly my tests pass. Or, take an even simpler test case:

I encountered the same issue.

these are what i did yarn add --dev babel-jest @babel/core @babel/preset-env

make jest.config.js in rootDir

module.exports = {
    moduleFileExtensions: ["js", "json", "jsx", "ts", "tsx", "json"],
    transform: {
        '^.+\\.(js|jsx)?$': 'babel-jest'
    testEnvironment: 'node',
    moduleNameMapper: {
        '^@/(.*)$': '<rootDir>/$1'
    testMatch: [
        '<rootDir>/**/*.test.(js|jsx|ts|tsx)', '<rootDir>/(tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx))'
    transformIgnorePatterns: ['<rootDir>/node_modules/']

then make babal.config.js in rootDir. go like this

module.exports = {
    "presets": ["@babel/preset-env"]

Globals · Jest, function sum(a, b) { return a + b; } module.exports = sum; Because TypeScript support in Babel is transpilation, Jest will not type-check your tests as they are  I'm at a boiling point with getting Jest to understand ES6 modules import/export syntax and it is hindering my project development progress. My project structure is the following: root module org-domain (ES6) org-services (ES6) react-ui-module (React via CRA2) org-services has a local path dependency on org-domain in its package json:

In addition to installing babel-jest (which comes with jest by default now) be sure to install regenerator-runtime.

How do I test a single file using Jest?, Jest can be used to mock ES6 classes that are imported into files you want to test. __mocks__/sound-player.js // Import this named export into your test file:  does not support loading JSON or Native Module by default; default for entry point without an extension is esm--type=[mode] to let you set the type on entry point. Will override package.type for entry point. A new file extension .cjs. this is specifically to support importing commonjs in the module mode.

For an updated config, I'm using

Select JEST and be happy:

As a reference, the current configuration:

npm install --save-dev babel-jest

In your package.json file make the following changes:

  "scripts": {
    "test": "jest"
  "jest": {
    "transform": {
      "^.+\\.jsx?$": "babel-jest"

Install babel preset npm install @babel/preset-env --save-dev

Create a .babelrc file

  "presets": ["@babel/preset-env"]

Run your tests:

npm run test

Getting Started · Jest, Writing Scripts As Frontend With Es6 And Jest. Roberto Vázquez But again a ready to use node module was there to do the job ( clipboardy )  In order to support ES modules Jest needs to add a recognition of those extensions. Jest will also need to pass an --experimental-modules flag to node.js until node will implement support of modules without a flag. I'm not sure if any other required changes would be needed within Jest in order to support this.

Jest 24: Refreshing, Polished, TypeScript-friendly · Jest, If I use import/export from ES6 then all my jest tests fail with error: Unexpected reserved word I convert my object under test to use old school IIFY syntax and  Jest es6 modules: unexpected module import. I'm trying to test a file which needs to import an es6 module like this: It seems I'm missing some configurations to make it work properly. If you can achieve this with another unit testing framework easily, I'm interested too. Thank you in advance for your help.

How to run jest when using es6 packages in node_modules · Issue , Using ES6 `import` in tests with Jest and Rollup. Apr 15 (babel plugin) It looks like your Babel configuration specifies a module transformer. – loganfsmyth May 13 '16 at 2:45. export react is just an example, in fact, I want organize some project so that user can import some object in shorter and high level path. – Yao Zhao May 13 '16 at 3:15. Thank you so much for that update. It solved every problem I had with ES6/7.

ES6 Class Mocks · Jest, However, now that Node.js supports both CommonJS and ES modules, it is best to my-app.js, in an ES module package scope because there is a package.json users are familiar with when using transpilation via tools like Babel or esm . No, this is a change they explicitly made. They decided project config shouldn't affect node_modules, which is entirely reasonable since project config can contain stage-0, react/jsx, flow and other things that should not be used in packages.

  • does this help at all?
  • @GeorgePompidou - Possibly. I'm not sure if/how the solution applies to babel-jest
  • it's a matter of specifying something like "presets": ["es2015"] in a package.json or a .babelrc. you are using babel, after all.
  • @GeorgePompidou - In that case the solution does not work. I already have a babelrc containing es2015, react presets. Standard transpilation works, inside of gulp. It's just the Jest framework that can't handle it.
  • it worked for someone here by installing babel-preset-es2015 and babel-preset-react packages. sorry if I'm not being much help--haven't had this issue.
  • If you don't want to pollute your project with .babelrc, you can add the env key above under a babel key in package.json.
  • Good hint! Thanks @DanDascalescu !
  • Actually, funny coincidence: I've just worked around this Jest bug the day before by moving the babel key out of package.json into babel.config.js. The bug only affects running transforms on files imported from the parent directory of the project.
  • I believe the more recent @babel/plugin-transform-modules-commonjs replaces transform-es2015-modules-commonjs
  • I will try that, @Albizia ! And, if it works, I will update the answer. Thanks for the note!
  • PS: don't forget to install the stage-0 preset through npm
  • Don’t ever use stage-0 or any stage-* in production. This answer is bad practice. Use preset-env