纽约 + 摩卡 + es6 模块

bla*_*ard 7 mocha.js node.js nyc

我正在尝试使用 nyc + mocha 来获取使用 es6 模块语法的单元测试的测试覆盖率。当我运行时mocha my_test.mjs一切正常。my_test.mjs 中的依赖项(使用本机导入)已正确解析。但是当我在这个命令前面加上 nyc:nyc mocha my_test.mjs它不再工作,抛出这个错误:

node_modules/mocha/lib/esm-utils.js:6
    return import(url.pathToFileURL(file));
           ^^^^^^

SyntaxError: Unexpected token import
    at Module._extensions..js (module.js:663:10)
    at Object.replacementCompile (nodejs/core/tests/cache.install.nodejs_install/node_modules/append-transform/index.js:60:13)
    at Module._extensions..js (module.js:663:10)
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的变体nyc --require esm mocha my_test.mjs或强制--experimental-modules使用节点,但似乎没有任何效果。

注意,我使用的是最新版本的node、nyc和mocha

任何想法?

Dav*_*ing 7

对于任何通过搜索找到此内容的人来说,c8代码覆盖工具对我来说是一个简单的替代品。我实际上只是安装了它,并在 package.json 脚本中将“nyc”替换为“c8”。

另外,如果您好奇的话,这里是开放的(在我写这篇文章时)纽约问题: https: //github.com/istanbuljs/nyc/issues/659


Ann*_*arg 3

更新依赖项后我遇到了同样的问题。我更新到 mocha 版本 8.x,同时仍然使用 mocha.opts 进行配置。

#4175:自 v7.0.0 起已弃用并发出警告,不再支持 mocha.opts

请参阅发行说明:https://github.com/mochajs/mocha/releases/tag/v8.0.0

恢复到 mocha 7.x 最终帮助了我*。如果您不想使用 mocha 7 或更早版本,可以将 mocha.opts 替换为配置文件: https: //mochajs.org/#configuring-mocha-nodejs

*注:在途中,我还添加了

"@types/node": "14.0.14",
"@types/mocha": "7.0.2",
Run Code Online (Sandbox Code Playgroud)

到 package.json。我的纽约版本是"nyc": "15.1.0",但我不确定这是否有必要解决您的问题。