Jest的代码覆盖率

Ale*_*uie 106 javascript jestjs

有没有办法在Javascript Jest测试框架中构建基于Jasmine的代码覆盖?

内部框架不会打印出它获得的代码覆盖率.我也尝试过使用伊斯坦布尔,毯子JSCover,但它们都不起作用.

cca*_*ert 85

使用Jest 21.2.1时,我可以在命令行看到代码覆盖,并通过传递--coverage给Jest脚本创建一个覆盖目录.以下是一些例子:

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

npx jest --coverage

我假设(虽然还没有确认),如果我全局安装了Jest,这也会有效:

jest --coverage

非常稀疏的文档就在这里

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

  • 切勿使用全局模块。为了确保版本的一致性和程序包的存在,请始终通过`./node_modules/.bin/jest --coverage`在`node_modules`中使用可执行文件。只要该软件包在package.json中被命名,就可以保证使用您期望的jest的确切版本执行。 (3认同)

Adr*_*son 79

更新:7/20/2018 - 为coverageReporters添加了链接和更新名称.

更新:8/14/2017 - 这个答案完全过时了.现在就看看Jest文档吧.他们有关于如何执行此操作的官方支持和文档.

@hankhsiao有一个分叉的回购,伊斯坦布尔与Jest合作.将此添加到您的dev依赖项

 "devDependencies": {
     "jest-cli": "git://github.com/hankhsiao/jest.git"
 }
Run Code Online (Sandbox Code Playgroud)

还要确保在package.json jest条目中启用了coverage,您还可以指定所需的格式.(HTML非常糟糕).

 "jest": {
     "collectCoverage": true,
     "coverageReporters": ["json", "html"],
 }
Run Code Online (Sandbox Code Playgroud)

玩笑文档coverageReporters(默认为 ["json", "lcov", "text"])

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

  • 它(现在)称为`coverageReporters`,默认为`["json","lcov","text"]`.见http://facebook.github.io/jest/docs/configuration.html#coveragereporters-array-string (3认同)
  • 我使用 --coverage 选项,但绝对没有发生任何不同的情况。 (2认同)

Ahm*_*ssy 27

2019年1月:开玩笑版本23.6

对于最近关注这个问题的人,特别是如果直接使用npm或纱线进行测试

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

根据开玩笑官方网站,您可以执行以下操作来生成覆盖率报告:

1-对于npm:

你必须npm在传递jest的--coverage参数之前放入

npm test -- --coverage
Run Code Online (Sandbox Code Playgroud)

如果你尝试yarn直接调用--它没有它将无法正常工作

2-对于纱线:

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

yarn test --coverage
Run Code Online (Sandbox Code Playgroud)

  • 如何仅获取已更改文件的笑话覆盖率? (2认同)
  • 这个答案对“package.json”的状态做出了很多假设。 (2认同)

Dee*_*ohn 24

这对我有用:

 "jest": {
    "collectCoverage": true,
    "coverageReporters": ["json", "html"]
  },
  "scripts": {
    "test": "jest  --coverage"
  },
Run Code Online (Sandbox Code Playgroud)

跑步:

yarn/npm test
Run Code Online (Sandbox Code Playgroud)

  • 如果您有很多配置,并且不希望弄乱“package.json”文件,这些配置属性也可以包含在“jest.config.js”中。请参阅 Jest 文档:https://jestjs.io/docs/configuration (4认同)
  • 应该是“package.json”。 (2认同)

小智 15

您可以运行 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


Win*_*ers 6

好吧,请忽略我以前的回答,因为有人告诉我它不能解决问题。

新答案:

1)检查最新的玩笑(v 0.22):https : //github.com/facebook/jest

2)Facebook团队将伊斯坦布尔作为覆盖率报告的一部分,您可以直接使用它。

3)执行完jest之后,您可以在控制台上获得覆盖率报告,并在jest设置的根文件夹下找到json和html格式的覆盖率报告。

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


旧答案:

也有同样的问题。简短的答案是:Istanbul并且Jest不能一起工作。

检查以下页面以获取更多详细信息:

https://github.com/facebook/jest/issues/101

jest使用contextify在本地代码的V8上下文中运行JS脚本,从而绕过了伊斯坦布尔的所有require和vm.runInThisContext钩子。因此,由于没有使用标准的可挂钩的node.js函数,并且由于每次测试都在其自己的沙箱中运行并且没有全局可用于存放coverage对象的对象,因此预先插入文件也无济于事,伊斯坦布尔封面将无法正常工作。

@Ciro Costa:该config.collectCoverage功能无效,因为它是“ TODO”功能。请检查源代码。

  • 问题是如何获得 Jest 的代码覆盖率。伊斯坦布尔和 Jest 不合作可能是真的,但这并不能回答问题。 (2认同)