Search code examples
javascriptreactjsjestjscreate-react-app

Jest - SyntaxError: Cannot use import statement outside a module


I am using jest:24.9.0 without any configuration, installed globally from a create-react-app. Inside these files I am using es6 modules. There is no error when using "test": "react-scripts test"

However when I move to use jest with "test": "jest --config jest.config.js", I see the below error.

 FAIL  src/configuration/notifications.test.js
  ● Test suite failed to run

    /var/www/management/node/src/configuration/notifications.test.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import notifications from './notifications';
                                                                                             ^^^^^^

    SyntaxError: Cannot use import statement outside a module

Solution

  • Jest doesn't support ES6 module and hence throwing this error when you directly run the test with Jest. If you want to run like that then you have to add babel.

    On the other side, when you run the test with react-scripts it uses babel behind the scene to transpile the code.

    In newer version of jest, babel-jest is now automatically loaded by Jest and fully integrated

    Hope this answer your question.

    Adding babel in jest.

    Installation

    babel-jest is now automatically loaded by Jest and fully integrated. This step is only required if you are using babel-jest to transform TypeScript files.

    npm install --save-dev babel-jest
    

    Usage

    In your package.json file make the following changes:

    {
      "scripts": {
        "test": "jest"
      },
      "jest": {
        "transform": {
          "^.+\\.[t|j]sx?$": "babel-jest"
        }
      }
    }
    

    Create babel.config.json configuration file

    Create a babel.config.json config in your project root and enable some presets.

    To start, you can use the env preset, which enables transforms for ES2015+

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

    In order to enable the preset you have to define it in your babel.config.json file, like this:

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

    Check for more details on Babel official site