Skip to content

Rust test insights

Tuist reports individual test results from cargo test, including unit tests, integration tests, and doctests. No Rust dependency or additional test runner is required.

Requirements

Report your test runs#

bash
tuist cargo test --workspace

With the mise Cargo wrapper configured, you can keep typing cargo test. Cargo still compiles and runs your tests, with its usual arguments, output, and exit code. Reporting failures do not change the result of your tests.

You can select a package or filter tests as usual:

bash
tuist cargo test -p store
tuist cargo test authentication

What Tuist tracks#

  • Passed, failed, and ignored tests from completed test suites.
  • Unit tests, integration tests, and doctests.
  • Whole-suite durations.
  • Available branch, commit, CI, and runner metadata.

Filtered tests and tests not executed after a failure are never reported as passing. Results appear under Tests in the dashboard.

Packages, modules, and test cases#

Tuist groups results by Cargo package and target. Rust module paths group individual tests within a target:

Dashboard labelRust meaningExample
ModulesCargo package and targetstore::api
Test SuitesRust module pathsapi::authentication
Test CasesIndividual testsrejects_invalid_token

Doctests use a separate module such as store::doctest/store. Their names include the source location, so moving an example can change its identity.

Doctests and durations#

Doctests run with your usual test command, including compile_fail, should_panic, and no_run examples. To run only doctests:

bash
tuist cargo test --doc

Stable libtest reports whole-suite time but not individual test durations. Unavailable timings are excluded from per-case duration histories and duration analytics, while test outcomes still contribute to reliability and run counts.

Reporting limits#

Individual results are collected from Cargo/libtest's default output. Commands using --no-run, --list, quiet or Cargo-verbose output, alternate formats, or uncaptured test output run normally without individual test reporting. Custom harnesses, incomplete summaries, ambiguous target attribution, and oversized reports are not uploaded.

If workspace packages have identically named integration targets, select one with -p <package>. Reporting supports exact workspace package names; dependency packages, version-qualified selectors, and globs execute normally but are not reported. Absolute doctest paths are omitted to keep checkout paths out of test identities.

Tuist streams output while collecting results. This can affect automatic color detection. Background processes that keep output pipes open after Cargo exits can cause the report to be omitted, but do not change Cargo's exit status.

Reliability and selection#

Use flaky test detection and quarantine to investigate unstable tests and mute or skip them. Test sharding distributes whole Cargo targets across CI workers. Coverage ingestion, coverage-based test selection, and build-once distribution are not available for plain Cargo test runs.

Troubleshooting#

If a test run doesn't appear in the dashboard, enable debug output to see why its report wasn't sent:

bash
TUIST_DEBUG=1 tuist cargo test --workspace