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; }); });
4 Réponses :
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.
La question est de savoir comment utiliser Typescript dans Mocha. Pas dans l'application
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", ... }
Voir aussi https://dev.to/bnorbertjs/my-nodejs-setup-mocha--chai-babel7-es6-43ei
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
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
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)
"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 utilisertype="module"
. Avez-vous vu la syntaxe des modules Intellij Idea Ecmascript Harmony ?