Flutter中如何从lcov.info排除freezed.dart与.g.dart文件
移除Flutter覆盖率报告中自动生成文件的正确方法
你的问题出在路径匹配规则和shell解析的问题上,之前的命令只匹配了lib下一级子目录的文件,没法覆盖所有层级的自动生成文件,调整命令就能解决:
完整操作步骤
- 生成原始覆盖率文件
flutter test --coverage
- 清理自动生成文件的覆盖率数据
用**匹配任意层级的子目录,同时指定两种自动生成文件的后缀,生成清理后的覆盖率文件:
lcov --remove coverage/lcov.info 'lib/**/*.freezed.dart' 'lib/**/*.g.dart' -o coverage/lcov_cleaned.info
- 用清理后的文件生成报告
genhtml coverage/lcov_cleaned.info -o coverage/html
- 打开查看报告
open coverage/html/index.html
为什么之前的命令无效?
- 你用的
lib/*/*.freezed.dart只能匹配lib/子目录/xxx.freezed.dart这种结构,要是自动生成文件在更深的子目录或者直接放在lib根目录,就匹配不到;**可以匹配任意层级的子目录,能覆盖所有情况。 - 多余的反斜杠转义会干扰shell对匹配模式的解析,直接用单引号包裹路径规则即可。
可选:覆盖原文件(不推荐,但方便后续步骤不变)
如果不想改后续命令的文件名,可以先生成临时文件再替换原文件:
lcov --remove coverage/lcov.info 'lib/**/*.freezed.dart' 'lib/**/*.g.dart' -o coverage/lcov.tmp && mv coverage/lcov.tmp coverage/lcov.info
之后直接用原来的genhtml命令即可。
内容的提问来源于stack exchange,提问作者Mohammed Niyaz
相关产品推荐
相关产品推荐

