6

我正在尝试使用 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)

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

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

任何想法?

4

5 回答 5

6

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

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

于 2020-12-12T23:03:29.180 回答
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",

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

于 2020-07-02T12:29:59.620 回答
0

看起来你有一个旧的 nodejs 版本,请按照下面的链接升级你的 node 版本:有同样的问题,现在很好!

如何更新 Node.js?

于 2020-09-18T10:20:09.563 回答
0

冒着显得傲慢的风险;我注意到上面你说你在 14.4.0 上仔细检查你的版本。我以为我在 14.x 上,因为我更新了 package.json,当我输入:

npm list | grep node

我有:

+-- @types/node@14.0.26
+-- nodemon@2.0.4
+-- ts-node@8.10.2

我是 Node 的新手,足以被绊倒。如果我输入:

node --version

然后我发现我在一个更老的。

一旦我更新到最新版本(14.6.0),这个错误就消失了。我使用的是 Windows,所以必须从 nodejs.org 下载最新版本。

于 2020-07-27T12:50:59.403 回答
-2

我和你有同样的问题。实际上,我修改了这个文件
node_modules/mocha/lib/esm-utils.js

return import(url.pathToFileURL(file));

return require(url.pathToFileURL(file));

它可以工作。

于 2020-07-12T08:46:17.380 回答