In large-scale projects or projects heavily integrated with third-party services, it is often necessary to skip certain tests when specific conditions are not met. For instance, if a required database is not available, running integration tests dependent on this database should be skipped to save time and avoid irrelevant test failures.
Existing solutions
Rust issue #68007: A long-standing issue suggests runtime test skipping but hasn't progressed. Need fundamental change on libtest.
Community crate test-with: This uses a proc macro to add #[ignore] at compile time. While useful, it lacks the flexibility.
Proposal
Enhance nextest to support conditional test skipping based on the output of a setup script. The configuration may look like:
[[profile.default.scripts]]
filter = "test(~integration)"
run-if = 'check-db'
# alternatively, we can implement an option `skip-if-fail`
# setup = 'check-db'
# skip-if-fail = true
[script.check-db]
command = 'cargo run -p check-db'
When the script outputs 'false', the tests in the specified group (filtered by "test(~integrate)") should be marked as SKIP.
Motivation
In large-scale projects or projects heavily integrated with third-party services, it is often necessary to skip certain tests when specific conditions are not met. For instance, if a required database is not available, running integration tests dependent on this database should be skipped to save time and avoid irrelevant test failures.
Existing solutions
Rust issue #68007: A long-standing issue suggests runtime test skipping but hasn't progressed. Need fundamental change on
libtest
.Community crate test-with: This uses a proc macro to add
#[ignore]
at compile time. While useful, it lacks the flexibility.Proposal
Enhance nextest to support conditional test skipping based on the output of a setup script. The configuration may look like:
When the script outputs 'false', the tests in the specified group (filtered by "test(~integrate)") should be marked as SKIP.
On CI, we can run
cargo nextest run --run-ignored all
to force them to run.