【问题标题】:How to get the code coverage report using Jest?如何使用 Jest 获取代码覆盖率报告?
【发布时间】:2014-09-09 15:24:54
【问题描述】:

有没有办法在构建于 Jasmine 之上的 JavaScript Jest 测试框架中进行代码覆盖?

内部框架does not 打印出它得到的代码覆盖率。我也尝试过使用IstanbulblanketJSCover,但它们都不起作用。

【问题讨论】:

标签: javascript jestjs


【解决方案1】:

使用 Jest 21.2.1 时,我可以在命令行中查看代码覆盖率,并通过将 --coverage 传递给 Jest 脚本来创建覆盖率目录。下面是一些例子:

我倾向于在本地安装 Jest,在这种情况下,命令可能如下所示:

npx jest --coverage

我假设(尽管尚未确认),如果我在全球范围内安装 Jest,这也会起作用:

jest --coverage

非常稀疏的文档是here

当我导航到 coverage/lcov-report 目录时,我发现了一个可以加载到浏览器中的 index.html 文件。它包括在命令行打印的信息,以及附加信息和一些图形输出。

【讨论】:

  • 永远不要使用全局模块。为确保版本一致性和包存在,请始终通过./node_modules/.bin/jest --coverage 使用node_modules 中的可执行文件。只要包在 package.json 中命名,您就可以保证以您期望的确切版本的 jest 执行。
  • 如何仅对更改的文件进行笑话覆盖?
  • 如果覆盖率低于某个限制,是否有一种简单的方法使测试失败?对应的 SO 问题:stackoverflow.com/questions/60512167/…
  • 我们可以更改“coverage”目录的位置吗?
【解决方案2】:

更新:2018 年 7 月 20 日 - 为 coverageReporters 添加了链接并更新了名称。

更新:2017 年 8 月 14 日 - 这个答案完全过时了。现在看看 Jest 文档。他们有关于如何做到这一点的官方支持和文档。

@hankhsiao 有一个分叉的 repo,Istanbul 正在与 Jest 合作。将此添加到您的开发依赖项中

 "devDependencies": {
     "jest-cli": "git://github.com/hankhsiao/jest.git"
 }

还要确保在你的 package.json jest 条目中启用了覆盖,你还可以指定你想要的格式。 (html 很糟糕)。

 "jest": {
     "collectCoverage": true,
     "coverageReporters": ["json", "html"],
 }

coverageReportersJest documentation(默认为 ["json", "lcov", "text"]

或者在调用 jest 时添加--coverage

【讨论】:

  • coverageFormats 选项已被移除——看起来每次都会生成 json 和 html。
  • 我使用 --coverage 选项,但绝对没有任何不同。
  • 它(现在)称为coverageReporters,默认为["json", "lcov", "text"]。见facebook.github.io/jest/docs/…
  • 不工作,发现未知选项“coverageFormats”,值为 ["json", "html"]。
【解决方案3】:

2019 年 1 月:Jest 版本 23.6

对于最近研究此问题的任何人尤其是直接使用npmyarn 进行测试时

目前,您不必更改配置选项

根据Jest official website,您可以执行以下操作来生成覆盖率报告:

1- 对于 npm:

您必须在传递 Jest 的 --coverage 参数之前输入 --

npm test -- --coverage

如果您尝试在不使用 -- 的情况下直接调用 --coverage,它将无法正常工作

2- 对于纱线​​:

你可以直接传递jest的--coverage参数

yarn test --coverage

【讨论】:

  • 如何仅对更改的文件进行笑话覆盖?
  • 从什么时候开始改变的?您可能希望为此使用 --watch 设置。
  • 这个答案对package.json的状态做了很多假设。
  • 这让我可以覆盖 /test 文件夹下的文件。绝对不是我想要的:D
【解决方案4】:

这对我有用:

 "jest": {
    "collectCoverage": true,
    "coverageReporters": ["json", "html"]
  },
  "scripts": {
    "test": "jest  --coverage"
  },

运行:

yarn/npm test

【讨论】:

  • 这个文件是什么?这个 JSON 文本去哪里了?
  • 应该是package.json
【解决方案5】:
  1. 查看最新的 Jest (v 0.22):https://github.com/facebook/jest

  2. Facebook 团队将 Istanbul 代码覆盖率输出添加到覆盖率报告中,您可以直接使用它。

  3. 执行Jest后,可以在控制台获取覆盖率报告,在Jest设置的根目录下,可以看到JSON和HTML格式的覆盖率报告。

  4. 仅供参考,如果您从 npm 安装,您可能无法获得最新版本;因此,请先尝试 GitHub,并确保覆盖范围是您所需要的。

【讨论】:

  • 问题是如何获得 Jest 的代码覆盖率。伊斯坦布尔和 Jest 不合作可能是真的,但这并不能回答问题。
【解决方案6】:

你可以运行 npx jest --coverage -- path/to/your/file.spec.js 这将显示受影响文件的覆盖范围

如果你想在浏览器中查看,可以如下操作,

  1. 转到浏览器和 CMD+O。
  2. 导航到您的存储库并搜索coverage/lcov-report/index.html

然后您可以直观地看到所有覆盖区域。

您也可以参考下面的这个链接,了解更多信息 https://dev.to/stevescruz/awesome-jest-tip-coverage-report-h5j

【讨论】:

    【解决方案7】:

    配置你的 package.json 文件

    “测试”:“开玩笑--覆盖”,

    现在运行:

    yarn test
    

    所有测试将开始运行,您将获得报告。

    【讨论】:

      【解决方案8】:

      如果您在使用 --coverage 时遇到问题,也可能是由于启用了coverageReporters 而没有添加“text”或“text-summary”。 来自文档:“注意:设置此选项会覆盖默认值。添加“文本”或“文本摘要”以在控制台输出中查看覆盖摘要。” Source

      【讨论】:

        【解决方案9】:

        如果您使用的是NestJS 框架,您可以使用以下命令获取代码覆盖率:

        npm run test:cov
        

        【讨论】:

          【解决方案10】:

          我遇到了同样的问题,我按照下面的方法修复了它。

          1. 安装纱线npm install --save-dev yarn
          2. 安装 jest-cli npm install --save-dev jest-cli
          3. 将此添加到 package.json "jest-coverage": "yarn run jest -- --coverage"

          编写测试后,运行命令npm run jest-coverage。这将在根目录中创建一个覆盖文件夹。 /coverage/icov-report/index.html 有代码覆盖率的 HTML 视图。

          【讨论】:

          • 不需要安装yarn。 Yarn 只是与 NPM 不同的包管理器
          • initial -- 只需要使用 npm,yarn 将所有参数传递给 jest。
          【解决方案11】:

          试试Chutzpah。我刚刚使用它。我还写了一篇关于如何集成到 Visual Studio 的博客。

          这就是我使用 Chutzpah 进行代码覆盖的方式:Code Coverage with Chutzpah

          【讨论】:

          • Chutzpath 建立在 Blanket 之上,我在上面指定 Jest 不能使用它。
          • 很有趣,因为我的刚刚工作。 francorobles.wordpress.com/2014/09/14/…
          • 您没有使用 Jest,它默认模拟每个 require
          猜你喜欢
          • 2018-06-03
          • 2020-02-25
          • 2020-12-21
          • 2021-08-19
          • 1970-01-01
          • 2022-12-16
          • 1970-01-01
          • 2014-08-21
          • 1970-01-01
          相关资源
          最近更新 更多