NYC + Mocha + ES6模块

7

我正在尝试使用nyc+mocha对使用es6模块语法的单元测试进行测试覆盖率。 当我运行mocha my_test.mjs时,一切都正常。my_test.mjs中的依赖项(使用native import)被正确解析。 但是,当我在该命令前加上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 或者强制使用 node 选项 --experimental-modules, 但都无法正常工作。

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

有什么办法吗?


你尝试过升级到Node 14吗? - GOTO 0
我正在使用14.4.0版本。 - blaizard
5个回答

7

如果您通过搜索找到此内容,可以使用代码覆盖率工具c8代替nyc。只需在package.json脚本中将'nyc'替换为'c8'即可。

另外,如果您感兴趣,这里是nyc问题的开放链接(在我写这篇文章时):https://github.com/istanbuljs/nyc/issues/659


1
谢谢Dave,那对我有用!那个项目背后的人完全被低估了!Benjamin,如果你有一天看到这个 - 你是我的救星。 - Henry Ruhs

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",

"nyc": "15.1.0", 添加到 package.json 中。但我不确定这是否有必要解决您的问题。

0

看起来你的nodejs版本比较旧,点击下面链接升级你的node版本: 我曾经遇到同样的问题,现在已经解决啦!

如何更新Node.js?


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下载最新版本。


-2

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

return import(url.pathToFileURL(file));

return require(url.pathToFileURL(file));

它可以工作。


1
我认为更改 node_modules/mocha(或直接更改 node_modules 中的任何文件)并不是一个好的做法。 - RtmY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接