跳到内容

Rust 测试洞察

Tuist 会报告来自 cargo test 的单个测试结果,包括单元测试、集成测试和文档测试。无需额外的 Rust 依赖或测试运行器。

Requirements

报告你的测试运行#

bash
tuist cargo test --workspace

配置好 mise Cargo 包装器后,你可以继续输入 cargo test。Cargo 仍会使用其常规参数、输出和退出码来编译并运行你的测试。报告失败不会改变你的测试结果。

你可以像往常一样选择包或过滤测试:

bash
tuist cargo test -p store
tuist cargo test authentication

Tuist 跟踪的内容#

  • 已完成测试套件中通过、失败和被忽略的测试。
  • 单元测试、集成测试和文档测试。
  • 整个套件的耗时。
  • 可用的分支、提交、CI 和运行器元数据。

被过滤的测试以及在失败后未执行的测试永远不会被报告为通过。结果会显示在仪表板的测试下。

包、模块和测试用例#

Tuist 按 Cargo 包和目标对结果进行分组。Rust 模块路径将目标内的各个测试分组:

仪表板标签Rust 含义示例
模块Cargo 包和目标store::api
测试套件Rust 模块路径api::authentication
测试用例单个测试rejects_invalid_token

文档测试使用单独的模块,例如 store::doctest/store。它们的名称包含源位置,因此移动示例可能会改变其标识。

文档测试和耗时#

文档测试会使用你常规的测试命令运行,包括 compile_fail、should_panic 和 no_run 示例。要仅运行文档测试:

bash
tuist cargo test --doc

稳定的 libtest 会报告整个套件的耗时,但不会报告单个测试的耗时。不可用的计时数据会从每个用例的耗时历史和耗时分析中排除,而测试结果仍会贡献于可靠性和运行次数统计。

报告限制#

单个结果是从 Cargo/libtest 的默认输出中收集的。使用 --no-run、--list、静默或 Cargo 详细输出、替代格式或未捕获测试输出的命令会正常运行,但不会报告单个测试。自定义测试 harness、不完整的摘要、模糊的目标归属以及过大的报告不会被上传。

如果工作区包具有同名集成目标,请使用 -p <package> 选择其中一个。报告支持精确的工作区包名称;依赖包、带版本限定符的选择器和通配符会正常执行,但不会被报告。绝对文档测试路径会被省略,以避免将检出路径纳入测试标识。

Tuist 在收集结果时会流式输出。这可能会影响自动颜色检测。在 Cargo 退出后仍保持输出管道打开的后台进程可能导致报告被省略,但不会改变 Cargo 的退出状态。

可靠性和选择#

使用不稳定测试检测和隔离来调查不稳定的测试,并将其静音或跳过。测试分片会将整个 Cargo 目标分布到 CI 工作节点上。普通 Cargo 测试运行不支持覆盖率摄入、基于覆盖率的测试选择以及一次构建分发。

故障排除#

如果测试运行未出现在仪表板中,请启用调试输出来查看其报告未发送的原因:

bash
TUIST_DEBUG=1 tuist cargo test --workspace