跳至主要内容

测试覆盖率

如果您在启动 deno test 时指定 --coverage 标志,Deno 将会为您的代码收集测试覆盖率信息并将其存储在一个目录中。

覆盖率信息直接从 JavaScript 引擎 (V8) 获取,非常准确。

然后,可以使用 deno coverage 工具将内部格式的覆盖率信息进一步处理成常用的格式。

⚠️ 为了确保覆盖率结果的一致性,请确保在运行测试后立即处理覆盖率数据。否则,源代码和收集的覆盖率数据可能会不同步,并意外地显示未覆盖的行。

# Go into your project's working directory
git clone https://github.com/oakserver/oak && cd oak

# Collect your coverage profile with deno test --coverage=<output_directory>
deno test --coverage=cov_profile

# From this you can get a pretty printed diff of uncovered lines
deno coverage cov_profile

# Or generate an HTML report
deno coverage cov_profile --html

# Or generate an lcov report
deno coverage cov_profile --lcov --output=cov_profile.lcov

# Which can then be further processed by tools like genhtml
genhtml -o cov_profile/html cov_profile.lcov

默认情况下,deno coverage 会排除任何与正则表达式 test\.(ts|tsx|mts|js|mjs|jsx|cjs|cts) 匹配的文件,并且只考虑包含与正则表达式 ^file: 匹配的说明符 - 也就是说,远程文件将被排除在覆盖率报告之外。

可以使用 --exclude--include 标志覆盖这些过滤器。一个模块说明符必须匹配 include_regular 表达式并且不匹配 exclude_ 表达式才能成为报告的一部分。