Ale*_*sev 7 javascript mocha.js ecmascript-6 es6-modules esm
Alex Gibson 有一篇很棒的文章“使用 Mocha 和 esm 测试原生 ES 模块”。谢谢他。
我尝试在我的项目中使用带有原生 ES 模块支持的 mocha,但我遇到了 2 个不同的错误:
$ ./node_modules/mocha/bin/mocha --require esm './test/Util.test.js'
TypeError [ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING]: A dynamic import callback was not specified.
at exports.importModuleDynamicallyCallback (internal/process/esm_loader.js:41:9)
at formattedImport (/.../node_modules/mocha/lib/esm-utils.js:6:23)
at Object.exports.requireOrImport (/.../node_modules/mocha/lib/esm-utils.js:23:14)
at Object.exports.loadFilesAsync (/.../node_modules/mocha/lib/esm-utils.js:33:34)
at Mocha.loadFilesAsync (/.../node_modules/mocha/lib/mocha.js:427:19)
...
Run Code Online (Sandbox Code Playgroud)
$ /usr/bin/node /.../node_modules/mocha/bin/mocha -r esm --ui bdd --reporter \
/.../PhpStorm/plugins/NodeJS/js/mocha-intellij/lib/mochaIntellijReporter.js \
/.../test/Util.test.js
TypeError: Invalid host defined options
at formattedImport (/.../node_modules/mocha/lib/esm-utils.js:6:23)
at Object.exports.requireOrImport (/.../node_modules/mocha/lib/esm-utils.js:23:14)
at Object.exports.loadFilesAsync (/.../node_modules/mocha/lib/esm-utils.js:33:34)
at Mocha.loadFilesAsync (/.../node_modules/mocha/lib/mocha.js:427:19)
...
Run Code Online (Sandbox Code Playgroud)
red*_*dia 11
根据我过去2小时了解到的情况:
{
"type": "module"
}
Run Code Online (Sandbox Code Playgroud)
{
"compilerOptions": {
"module": "esnext",
"moduleResolution": "node",
}
}
Run Code Online (Sandbox Code Playgroud)
{
"node-option": [
"experimental-specifier-resolution=node",
"loader=ts-node/esm"
]
}
Run Code Online (Sandbox Code Playgroud)
更新:我认为错误的原因是参数中的--require esm选项mocha与指示源是 ES6 模块(*.mjs或中的type选项package.json)的其他方法之间的冲突。我当前的测试有.mjs扩展,并且在没有"type": "module"in 的情况下发生了相同的错误package.json
我查了一下原因,这就是原因——我自己的package.json:
"type": "module"
Run Code Online (Sandbox Code Playgroud)
默认情况下,Node.js 将 JavaScript 代码视为 CommonJS 模块。作者可以通过 .mjs 文件扩展名、package.json“type”字段或 --input-type 标志告诉 Node.js 将 JavaScript 代码视为 ECMAScript 模块。
如 Alex Gibson 的帖子中所述,只需"type": "module"从您的package.json和mocha将运行esm支持的测试中删除即可。
这是我的测试存储库,其中包含要尝试的代码:flancer64/so_mocha_esm
小智 2
这对我有用
"test": "mocha --require ts-node/register './src/test/**/*.ts'"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3115 次 |
| 最近记录: |