Jest的代码覆盖率


Answers:


123

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

我倾向于在本地安装Jest,在这种情况下,命令可能看起来像这样:

npx jest --coverage

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

jest --coverage

非常稀疏的文档在这里

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


7
切勿使用全局模块。为确保版本一致性和软件包的存在,请始终在node_modulesvia中使用可执行文件./node_modules/.bin/jest --coverage。只要包在package.json中被命名,就可以保证使用您期望的准确的jest版本执行。
taystack

如何获得仅针对已更改文件的笑话报道?
Shanika Ediriweera,

如果覆盖率低于特定限制,是否有一种简单的方法可以使测试失败?:通讯SO-问题stackoverflow.com/questions/60512167/...
斯特凡


88

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

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

@hankhsiao有一个分叉的仓库,伊斯坦布尔正在与Jest合作。将此添加到您的开发依赖项

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

还要确保在package.json的jest条目中启用了coverage,并且您还可以指定所需的格式。(HTML是相当糟糕的屁股)。

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

请参阅Jest文档以了解coverageReporters(默认值为 ["json", "lcov", "text"]

--coverage在您开玩笑时添加。


1
coverageFormats选项已被删除-看起来json和html都是每次生成的。

1
我使用--coverage选项,但绝对没有任何不同。
gbbr

3
(现在)被调用coverageReporters,默认值为["json", "lcov", "text"]。见facebook.github.io/jest/docs/...
卡斯滕S.

不起作用,发现值为[“ json”,“ html”]的未知选项“ coverageFormats”。
srghma

40

2019年1月:Jest版本23.6

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

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

按照jest官方网站,您可以执行以下操作来生成覆盖率报告:

1-对于npm:

您必须--先通过--coverage开玩笑的论点

npm test -- --coverage

如果您尝试--coverage直接调用不带的--,则将不起作用

2-对于纱线:

您可以--coverage直接传递笑话的参数

yarn test --coverage

1
如何获得仅针对已更改文件的笑话报道?
Shanika Ediriweera,

从什么时候开始改变?您可能要为此使用--watch设置。
koehn

1
这个答案对状态的假设很多package.json
airtonix

6

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

新答案:

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

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

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

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


旧答案:

也有同样的问题。简短的回答是:IstanbulJest不能一起工作。

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

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

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

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


问题是如何获得Jest的代码覆盖率。伊斯坦布尔和Jest不合作可能是对的,但这并不能回答问题。
大卫·拉布

0

如果您遇到--coverage无法正常工作的问题,也可能是由于未启用“ text”或“ text-summary”而启用了coverageReporters。在文档中:“注意:设置此选项将覆盖默认值。添加“文本”或“文本摘要”以在控制台输出中查看覆盖率摘要。” 资源


0

配置您的package.json文件

“ test”:“开玩笑--coverage”,

在此处输入图片说明

现在运行:

yarn test

所有测试将开始运行,您将获得报告。 在此处输入图片说明


-1

我有同样的问题,我如下修复。

  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文件夹。/coverage/icov-report/index.html具有html代码覆盖率视图。

祝您编码愉快!


8
无需安装纱线。纱线与NPM只是一种不同的包装管理器
黑色

-10

尝试Chutzpah。我刚用过。我写了关于如何在Visual Studio中进行集成的博客。

这就是我对Chutzpah进行代码覆盖的方式:http ://francorobles.wordpress.com/2014/09/14/code-coverage-with-chutzpah/


Chutzpath构建在Blanket之上,我在上面指定了Jest无法使用它。
Alex Palcuie 2014年

有趣,因为我的只是工作。francorobles.wordpress.com/2014/09/14/...
francorobles

1
您没有使用Jest,它默认情况下会嘲笑every require
Alex Palcuie 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.