如何使用 Node、Mocha 获取代码覆盖率信息

Posted

技术标签:

【中文标题】如何使用 Node、Mocha 获取代码覆盖率信息【英文标题】:How to get code coverage information using Node, Mocha 【发布时间】:2015-08-10 00:17:21 【问题描述】:

我最近开始在 Mocha 的帮助下对我的 Node 项目进行单元测试。到目前为止一切进展顺利,我发现我的代码已经有了显着改进,因为我正在考虑在我的测试中涵盖的所有角度。

现在,我想与团队的其他成员分享我的经验,并让他们进行自己的测试。我想分享的部分信息是我的代码实际上被覆盖了多少。

以下是我的应用程序结构示例,我已将其分成不同的组件或模块。为了促进重用,我试图将所有依赖项保持在最低限度并与组件文件夹隔离。这包括保持测试隔离,而不是项目根目录中的默认 test/ 文件夹。

| app/
| - component/
| -- index.js
| -- test/
| ---- index.js

目前我的package.json 看起来像这样。我正在玩弄Istanbul,但我与它无关。我也尝试过使用Blanket,取得了类似的成功。


  "scripts": 
    "test": "clear && mocha app/ app/**/test/*.js",
    "test-cov": "clear && istanbul cover npm test"

如果我按原样运行test-cov 命令,我会从伊斯坦布尔收到以下错误(这没有帮助):

No coverage information was collected, exit without writing coverage information

所以我的问题是:鉴于我当前的应用程序结构和环境,我如何才能使用伊斯坦布尔(或其他工具)正确报告我的代码覆盖率?


TL;DR

如何使用 Node、Mocha 和我当前的应用程序结构报告我的代码覆盖率?


编辑

需要明确的是,Mocha 在当前状态下正在正确运行测试。获取代码覆盖率报告是我开始工作时遇到的困难。

编辑 2

我收到通知,another question 可能已经回答了我的问题。它只建议安装伊斯坦布尔并运行cover 命令,我已经这样做了。另一个建议建议使用 _mocha 运行测试命令,根据我所做的一些研究,这是为了防止伊斯坦布尔吞下 Mocha 的标志,并且在较新版本的 Mocha 中没有必要。

【问题讨论】:

重复问题,请查看***.com/questions/16633246/code-coverage-with-mocha 了解更多信息。 感谢您花时间发布。在发布此问题之前,我在研究中遇到了这一点,但没有帮助。答案只建议安装 Istanbul 并运行 cover 命令,如您所见,我已经这样做了。 它还建议使用 _mocha 而不是你正在使用的任何东西。 你是对的。我已经读过为什么提出这个建议(与伊斯坦布尔吃掉的参数有关),而且在较新版本的 Mocha 中没有必要。无论哪种方式,结果都是一样的。感谢您的宝贵时间。 你能让这个工作@ChrisWright 吗? 【参考方案1】:

您需要一个.istanbul.yml 文件。我没有看到任何对它的引用——在不知道它的内容的情况下很难说。 我认为没有足够的信息来解决这个问题。如果您更新问题,我会更新这个答案,尤其是在赏金到期之前,嗯?

【讨论】:

问题很简单:当我的测试位于不同的子文件夹而不是默认的test/ 文件夹时,如何获得覆盖结果。我目前没有这个文件,所以这个问题有所有可用的详细信息。如果我可以使用该配置文件来完成此操作(自从您发布后我进行了一些搜索但一无所获),请告诉我如何,我会选择您的答案并奖励您。 我很确定您可以定义测试目录以及您想要在该文件中覆盖的目录,但我现在没时间了,不用担心。祝你好运,克里斯。【参考方案2】:

这就是我如何获得所有 js 项目的代码覆盖率(看起来像来自 Sachacr 的项目):

istanbul cover _mocha -- -R spec --recursive test

【讨论】:

【参考方案3】:

你应该尝试像这样运行你的测试:

istanbul cover _mocha test/**/*.js

【讨论】:

以上是关于如何使用 Node、Mocha 获取代码覆盖率信息的主要内容,如果未能解决你的问题,请参考以下文章

您如何安装和运行 Mocha,Node.js 测试模块?安装后获取“mocha:找不到命令”

如何在 vs 代码中使用 mocha 生成覆盖率报告?

如何在基于 Express 的 API 上设置代码覆盖率?

如何在单个命令中使用 mochawesome 和 mocha-sonarqube-report?

如何运行用 TypeScript 编写的 Mocha 测试?

Grunt-Mocha-Test BlanketJS 覆盖范围