Skip to content

rust_test

Rust test target.

Description

Compiles a Rust test crate with rustc --test, then runs the produced test binary through Once's generic test capability. The target can model unit tests from a library root, or integration tests by setting crate_root to a test crate entry file and depending on the library under test.

The runner uses the Rust test harness list output to populate once.test_results.v1, stores the native test output, and returns the test binary exit status to Once.

Attributes

AttributeTypeRequiredDefaultDescription
crate_namestringnotarget nameRust crate name passed to rustc; - and . are rewritten as _ when omitted
crate_rootstringnosrc/lib.rsPackage-relative test crate root
editionstringno2021Rust edition passed to rustc
featureslist<string>no[]Cargo feature names lowered to --cfg=feature=... flags
crate_featureslist<string>no[]Bazel-compatible alias for features
targetstringnohost targetRust target triple passed to rustc --target
envmap<string, string>no{}Environment variables for rustc
rustc_envmap<string, string>no{}Rust compiler environment variables
rustc_env_fileslist<string>no[]Files with NAME=value entries merged into the rustc environment before env and rustc_env
rustc_flagslist<string>no[]Additional rustc flags appended after Once-managed flags
cap_lintsstringnoemptyOptional rustc lint cap passed as --cap-lints
linkerstringnoinferredOptional linker path passed as -C linker=...
linker_flagslist<string>no[]Additional linker flags lowered to -C link-arg=...
native_linkoptslist<string>no[]Linker flags propagated to downstream native consumers when this target is used as native input
exported_linker_flagslist<string>no[]Buck-compatible alias for native linker flags propagated to downstream native consumers
exported_post_linker_flagslist<string>no[]Buck-compatible propagated linker flags appended after normal exported linker flags
linker_scriptstringnoemptyPackage-relative linker script passed to the linker and included in the compile action inputs
datalist<string>no[]Runtime data file globs available to the test runner and propagated from Rust dependencies
compile_datalist<string>no[]Bazel-compatible compile-time data file globs included in the rustc action inputs
crate_aliasesmap<string, string>no{}Map dependency label, package name, or crate name to the local extern crate name
aliasesmap<string, string>no{}Bazel-compatible alias map from dependency label or crate name to local extern crate name
named_depsmap<string, string>no{}Buck-compatible alias map from local extern crate name to dependency label or crate name
cargo_packagestringnoemptyCargo package name used to select direct external deps from a cargo_dependencies dependency set
build_scriptstringnoemptyPackage-relative Cargo build script path run before rustc
argslist<string>no[]Arguments passed to the compiled test binary
test_envmap<string, string>no{}Environment variables passed to the test runner
env_inheritlist<string>no[]Host environment variable names inherited by the test runner before test_env overrides
cratetargetnoemptyReserved Bazel-compatible reference to an already-built crate under test
use_libtest_harnessboolnotrueWhether to use the Rust libtest harness. Only true is supported
labelslist<string>no[]Labels exposed through once_test_info for test discovery
timeout_msintnoOptional test timeout in milliseconds

Accepted but unsupported attributes: default_deps, doc_deps, doc_env, doc_link_style, doc_linker_flags, doc_named_deps, link_deps, link_style, mapped_srcs, proc_macro_deps, rpath, runtime_dependency_handling, and rustdoc_flags. Non-empty values fail validation.

Dependency Edges

EdgeAcceptsDescription
depsrust_crate, rust_proc_macro, rust_dependency_setRust crate dependencies consumed through --extern

Providers

The target emits rust_test and once_test_info.

Capabilities

CapabilityOutput groups
buildbinary
testdefault, test_results, logs

Outputs

OutputLocation
Test binary.once/out/<target>/<crate_name> or .exe on Windows
Test results.once/out/<target>/test/test_results.json
Test log.once/out/<target>/test/rust-libtest.log
Native runner output.once/out/<target>/test/native_results.txt

Limitations

The test capability runs only host-target test binaries. A cross-target rust_test can still be built, but running it needs a platform runner that is not part of this target kind yet.

Example

toml
[[target]]
name = "hello"
kind = "rust_library"
srcs = ["src/**/*.rs"]

[target.attrs]
crate_name = "hello"
edition = "2021"

[[target]]
name = "hello_tests"
kind = "rust_test"
srcs = ["tests/**/*.rs"]
deps = ["./hello"]

[target.attrs]
crate_name = "hello_tests"
crate_root = "tests/greeting_test.rs"
edition = "2021"
labels = ["unit"]

Released under an open-source license.