Trying ES6 style import gives 'Cannot use import statement outside a module'

48,162

Solution 1

The easiest way to run Mocha tests written in ES6 is compiling them on-the-fly using Mocha --require @babel/register option (see https://github.com/mochajs/mocha/wiki/compilers-deprecation#what-should-i-use-instead-then). Of course, you need to make sure to install the corresponding modules and set up the .babelrc accordingly

package.json:

"dependencies": {
  "@babel/cli": "^7.7.4",
  "@babel/core": "^7.7.4",
  "@babel/preset-env": "^7.7.4",
  "@babel/register": "^7.7.4",
...
}

.babelrc:

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

enter image description here

See also https://dev.to/bnorbertjs/my-nodejs-setup-mocha--chai-babel7-es6-43ei

Solution 2

I had the same problem when updating one of my ts libraries to es6 modules instead of commonjs. After the change in the tsconfig.json my npm run test produced the mentioned error.

import chai from 'chai'
^^^^^^
SyntaxError: Cannot use import statement outside a module

I solved it without babel by adding an own tsconfig file just for testing.

tsconfig.testing.json

{
  "compilerOptions": {
      "module": "commonjs",
      "target": "es6"
  },
  "include": ["**/*.spec.ts"]
}

To run the tests via script in package.json

"test": "cross-env TS_NODE_PROJECT=\"tsconfig.testing.json\" mocha -r ts-node/register src/**/*.spec.ts",

(cross-env to set the env variable os independent)

Solution 3

I was able to get this working by adding a .mocharc.yaml file at the source of my project with the following:

require: '@babel/register'

source: https://github.com/mochajs/mocha-examples/tree/master/packages/babel

Share:
48,162
driftwood
Author by

driftwood

Updated on June 15, 2021

Comments

  • driftwood
    driftwood almost 3 years

    I am trying to write a javascript test in intellij for which I need to import some dependancies and I want to use ES6 style import statements but getting error

    /usr/local/bin/node /workspace/rr-sample/node_modules/mocha/bin/_mocha
    --ui bdd --reporter "/Users/me/Library/Application Support/IntelliJIdea2019.1/NodeJS/js/mocha-intellij/lib/mochaIntellijReporter.js"
    tests/*.test.js /workspace/rr-sample/tests/App.test.js:3
    import chai from 'chai'
    ^^^^^^
    
    SyntaxError: Cannot use import statement outside a module
        at wrapSafe (internal/modules/cjs/loader.js:1043:16)
        at Module._compile (internal/modules/cjs/loader.js:1091:27)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:1160:10)
        at Module.load (internal/modules/cjs/loader.js:976:32)
        at Function.Module._load (internal/modules/cjs/loader.js:884:14)
        at Module.require (internal/modules/cjs/loader.js:1016:19)
        at require (internal/modules/cjs/helpers.js:69:18)
        at /workspace/rr-sample/node_modules/mocha/lib/mocha.js:334:36
        at Array.forEach (<anonymous>)
        at Mocha.loadFiles (/workspace/rr-sample/node_modules/mocha/lib/mocha.js:331:14)
        at Mocha.run (/workspace/rr-sample/node_modules/mocha/lib/mocha.js:809:10)
        at Object.exports.singleRun (/workspace/rr-sample/node_modules/mocha/lib/cli/run-helpers.js:108:16)
        at exports.runMocha (/workspace/rr-sample/node_modules/mocha/lib/cli/run-helpers.js:142:13)
        at Object.exports.handler (/workspace/rr-sample/node_modules/mocha/lib/cli/run.js:292:3)
        at Object.runCommand (/workspace/rr-sample/node_modules/yargs/lib/command.js:242:26)
        at Object.parseArgs [as _parseArgs] (/workspace/rr-sample/node_modules/yargs/yargs.js:1087:28)
        at Object.parse (/workspace/rr-sample/node_modules/yargs/yargs.js:566:25)
        at Object.exports.main (/workspace/rr-sample/node_modules/mocha/lib/cli/cli.js:68:6)
        at Object.<anonymous> (/workspace/rr-sample/node_modules/mocha/bin/_mocha:10:23)
        at Module._compile (internal/modules/cjs/loader.js:1121:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:1160:10)
        at Module.load (internal/modules/cjs/loader.js:976:32)
        at Function.Module._load (internal/modules/cjs/loader.js:884:14)
        at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:67:12)
        at internal/main/run_main_module.js:17:47
    
    

    What exactly is the issue? I found this link (and others) http://xahlee.info/js/js_import_export.html which tells you how to fix this error but in another context which doesn't help me, and it doesn't explain what the problem is.

    In case it is helpful here is the code I am using.

    //const chai = require("chai");
    import chai from 'chai'
    
    const React = require("react");
    const expect = chai.expect;
    
    describe('how it works first-time test', () => {
      it('checks equality', () => {
    
        const val = false;
        expect(val).to.be.false;
      });
    
    });