我正在尝试用intellij编写一个javascript测试,为此我需要导入一些依赖关系,并且我想使用ES6样式的导入语句,但是会出错
/ 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
从“柴”中导入柴
^^^^^^^
SyntaxError:无法在模块外部使用import语句 在wrapSafe(内部/模块/cjs/loader.js:1043:16) 在Module._compile(内部/模块/cjs/loader.js:1091:27) 在Object.Module._extensions..js(内部/模块/cjs/loader.js:1160:10) 在Module.load(internal / modules / cjs / loader.js:976:32) 在Function.Module._load(内部/模块/cjs/loader.js:884:14) 在Module.require(internal / modules / cjs / loader.js:1016:19) 在要求时(内部/模块/cjs/helpers.js:69:18) 在/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) 在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) 在Object.runCommand(/workspace/rr-sample/node_modules/yargs/lib/command.js:242:26) 在Object.parseArgs [作为_parseArgs](/workspace/rr-sample/node_modules/yargs/yargs.js:1087:28) 在Object.parse(/workspace/rr-sample/node_modules/yargs/yargs.js:566:25) 在Object.exports.main(/workspace/rr-sample/node_modules/mocha/lib/cli/cli.cli:68:6) 在对象。 (/ workspace / rr-sample / node_modules / mocha / bin / _mocha:10:23) 在Module._compile(internal / modules / cjs / loader.js:1121:30) 在Object.Module._extensions..js(内部/模块/cjs/loader.js:1160:10) 在Module.load(internal / modules / cjs / loader.js:976:32) 在Function.Module._load(内部/模块/cjs/loader.js:884:14) 在Function.executeUserEntryPoint [作为runMain](内部/模块/run_main.js:67:12) 在internal / main / run_main_module.js:17:47
到底是什么问题?我找到了此链接(及其他链接)http://xahlee.info/js/js_import_export.html,该链接告诉您如何解决此错误,但在另一种情况下却无济于事,也不能解释问题的所在。
如果这对我有帮助,请使用我正在使用的代码。
//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;
});
});
答案 0 :(得分:1)
因此,您必须确保将脚本作为es模块执行。
例如使用https://nodejs.org/api/esm.html#esm_code_import_code_statements而非Nodejs执行脚本以启用es6或更高版本。
答案 1 :(得分:1)
将我的ts库之一更新到es6模块而不是commonjs时,我遇到了同样的问题。更改tsconfig.json后,我的npm run test
产生了上述错误。
import chai from 'chai'
^^^^^^
SyntaxError: Cannot use import statement outside a module
我通过添加自己的tsconfig文件(仅用于测试)解决了这个问题。
tsconfig.testing.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es6"
},
"include": ["**/*.spec.ts"]
}
要通过package.json中的脚本运行测试
"test": "cross-env TS_NODE_PROJECT=\"tsconfig.testing.json\" mocha -r ts-node/register src/**/*.spec.ts",
(cross-env可以独立于操作系统设置env变量)
答案 2 :(得分:0)
运行用ES6编写的Mocha测试的最简单方法是使用Mocha --require @babel/register
选项(见https://github.com/mochajs/mocha/wiki/compilers-deprecation#what-should-i-use-instead-then)动态地编译它们。当然,您需要确保安装相应的模块并相应地设置.babelrc
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"
]
]
}
另请参阅https://dev.to/bnorbertjs/my-nodejs-setup-mocha--chai-babel7-es6-43ei
答案 3 :(得分:0)
通过在项目源中添加.mocharc.yaml文件,可以使此工作正常进行:
require: '@babel/register'
来源:https://github.com/mochajs/mocha-examples/tree/master/packages/babel