Jest测试覆盖率为完全没有测试的模块提供了100%的覆盖率

pcww981p  于 2022-12-16  发布在  Jest
关注(0)|答案(1)|浏览(638)

我在Jest测试覆盖率方面遇到2个问题:
1-Jest报告了100%(Stmts、分支、Func和Lines)的模块覆盖率,这些模块没有任何测试,但被测试的模块需要测试
2-Jest报告100%的分支覆盖率,这些模块既没有测试,也没有被测试模块所需
在图像中:

  • Summer是一个测试模块
  • toNum未测试,但由sum要求
  • 子组件既未经过测试,也未被测试模块要求

我已经创建了一个回购协议来重现这个问题:https://github.com/hossamnasser938/Reproduce-Jest-Coverage-Issue
这是我的包裹json:

下面是我的文件夹结构:

如何从覆盖范围报告中删除sub.js条目?非常感谢您的帮助。

mxg2im7a

mxg2im7a1#

1-Jest报告了100%(Stmts、分支、Func和Lines)的模块覆盖率,这些模块没有任何测试,但被测试的模块需要测试
当你配置Jest来收集覆盖率时,这是预期的行为。所需的模块仍然由你的测试执行,尽管它们没有自己的测试。
这将使用覆盖率收集语句更新所有已执行的文件
您的测试正在执行所需模块中的所有代码,因此测试代码完全覆盖了该模块。即使该模块由另一个测试执行,您仍应为所需模块编写单独的测试,以确保它作为一个单元独立工作。
2-Jest报告100%的分支覆盖率,这些模块既没有测试,也没有被测试模块所需
同样,考虑到collectCoverageFrom的配置值包括sub.js,并且sub的实现没有分支,因此Branch语句将100%执行(因为没有分支),这也是预期行为。
如果您希望Jest停止报告sub.js,那么您有几个选择:

  • 完全删除collectCoverageFrom的配置,这将从覆盖率报告表中删除sub.js的条目。
  • 修改collectCoverageFrom的值以明确忽略sub.js
collectCoverageFrom: ['src/**/*.js', '!src/**/sub.js']

就我个人而言,我会让一切保持原样,以提醒sub.js仍然需要在足够的覆盖率下进行测试。

相关问题