13
votes

L'essai de l'importation de style ES6 donne `` Impossible d'utiliser l'instruction d'importation en dehors d'un module ''

J'essaie d'écrire un test javascript dans intellij pour lequel je dois importer des dépendances et je veux utiliser des instructions d'importation de style ES6 mais j'obtiens une erreur

/ 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

importer chai depuis 'chai'

^^^^^^

SyntaxError: Impossible d'utiliser l'instruction import en dehors d'un module sur wrapSafe (interne / modules / cjs / loader.js: 1043: 16) sur Module._compile (interne / modules / cjs / loader.js: 1091: 27) sur Object.Module. _extensions..js (interne / modules / cjs / loader.js: 1160: 10) à Module.load (interne / modules / cjs / loader.js: 976: 32) à Function.Module._load (interne / modules / cjs /loader.js:884:14) sur Module.require (interne / modules / cjs / loader.js: 1016: 19) sur require (interne / modules / cjs / helpers.js: 69: 18) sur / workspace / rr -sample / node_modules / mocha / lib / mocha.js: 334: 36 à Array.forEach () à Mocha.loadFiles (/workspace/rr-sample/node_modules/mocha/lib/mocha.js:331:14) à Mocha .run (/workspace/rr-sample/node_modules/mocha/lib/mocha.js:809:10) dans Object.exports.singleRun (/ workspace / rr-sample / node_modules / mocha / lib / cli / run-helpers. js: 108: 16) à exports.runMocha (/workspace/rr-sample/node_modules/mocha/lib/cli/run-helpers.js:142:13) à Object.exports.handler (/ workspace / rr-sample / node_modules / mocha / lib / cli / run.js: 292: 3) à Ob ject.runCommand (/workspace/rr-sample/node_modules/yargs/lib/command.js:242:26) à Object.parseArgs [as _parseArgs] (/workspace/rr-sample/node_modules/yargs/yargs.js:1087 : 28) sur Object.parse (/workspace/rr-sample/node_modules/yargs/yargs.js:566:25) sur Object.exports.main (/ workspace / rr-sample / node_modules / mocha / lib / cli / cli .js: 68: 6) sur Object. (/ workspace / rr-sample / node_modules / mocha / bin / _mocha: 10: 23) à Module._compile (interne / modules / cjs / loader.js: 1121: 30) à Object.Module._extensions..js (interne /modules/cjs/loader.js:1160:10) à Module.load (interne / modules / cjs / loader.js: 976: 32) à Function.Module._load (interne / modules / cjs / loader.js: 884 : 14) à Function.executeUserEntryPoint [as runMain] (internal / modules / run_main.js: 67: 12) à internal / main / run_main_module.js: 17: 47

Quel est exactement le problème? J'ai trouvé ce lien (et d'autres) http://xahlee.info/js/js_import_export.html qui vous indique comment corriger cette erreur mais dans un autre contexte qui ne m'aide pas, et il n'explique pas quel est le problème .

Au cas où cela serait utile, voici le code que j'utilise.

//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;
  });

});


1 commentaires

"Il n'explique pas quel est le problème" - il dit explicitement "si votre code utilise l' import ou l' export , alors il doit être chargé en tant que module." le long de la partie où il est dit que vous devez utiliser type="module" . Avez-vous vu la syntaxe des modules Intellij Idea Ecmascript Harmony ?


4 Réponses :


0
votes

D'après ledoc :

https://nodejs.org/api/esm.html#esm_code_import_code_statements

Vous devez donc vous assurer d'exécuter le script en tant que module es.

Exécuter le script en utilisant babel-node au lieu de Nodejs pour activer le es6 ou plus récent.


1 commentaires

La question est de savoir comment utiliser Typescript dans Mocha. Pas dans l'application



11
votes

Le moyen le plus simple d'exécuter des tests Mocha écrits dans ES6 est de les compiler à la volée en utilisant l' --require @babel/register Mocha --require @babel/register (voir https://github.com/mochajs/mocha/wiki/compilers-deprecation#what- devrais-je-utiliser-plutôt-alors ). Bien sûr, vous devez vous assurer d'installer les modules correspondants et de configurer le .babelrc conséquence

package.json:

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

.babelrc:

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

entrez la description de l'image ici

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


3 commentaires

Les options Extra Mocha étaient importantes pour moi


c'est la configuration d'exécution de Mocha, vous pouvez la trouver dans Exécuter> Modifier les configurations ...


A travaillé pour moi, n'a pas utilisé la configuration qu'il a dans la capture d'écran



0
votes

J'ai pu faire fonctionner cela en ajoutant un fichier .mocharc.yaml à la source de mon projet avec les éléments suivants:

require: '@babel/register'

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


0 commentaires

1
votes

J'ai eu le même problème lors de la mise à jour d'une de mes bibliothèques ts vers des modules es6 au lieu de commonjs. Après la modification du tsconfig.json, mon npm run test produit l'erreur mentionnée.

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

Je l'ai résolu sans babel en ajoutant un propre fichier tsconfig juste pour le test.

tsconfig.testing.json

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

Pour exécuter les tests via un script dans package.json

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

(cross-env pour définir la variable env os indépendante)


0 commentaires