跳到主要内容

测试覆盖率

Deno 将在启动 deno test 时,如果指定 --coverage 标志,将测试覆盖率收集到一个目录中。

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

然后,可以使用 deno coverage 工具将其从内部格式进一步处理成众所周知的格式。

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

# 进入项目的工作目录
git clone https://github.com/oakserver/oak && cd oak

# 使用 deno test --coverage=<output_directory> 收集覆盖率概要
deno test --coverage=cov_profile

# 从中可以获取未覆盖行的漂亮差异输出
deno coverage cov_profile

# 或生成一个 lcov 报告
deno coverage cov_profile --lcov --output=cov_profile.lcov

# 然后可以进一步由 genhtml 等工具处理
genhtml -o cov_profile/html cov_profile.lcov

默认情况下,deno coverage 将排除与正则表达式 test\.(ts|tsx|mts|js|mjs|jsx|cjs|cts) 匹配的文件,并仅考虑包括匹配正则表达式 ^file: 的模块规范 - 即,远程文件将不包括在覆盖报告中。

可以使用 --exclude--include 标志来覆盖这些过滤器。模块规范必须与 include 正则表达式匹配,并且不能与 exclude 正则表达式匹配,才会包括在报告中。