writer::Libtest
(enabled by libtest
feature in Cargo.toml
) allows IntelliJ Rust plugin to interpret output of cucumber
tests similar to unit tests. To use it, just add Cargo configuration (current example uses cargo test --test wait --features libtest
command) or run it via Cargo command. This automatically adds --format=json
CLI option, which makes the cucumber
's output IDE-compatible.
Example below is set up to output with the default writer::Basic
if there is no --format=json
option, or with writer::Libtest
otherwise.
cucumber = { version = "0.20", features = ["libtest"] }
# extern crate cucumber;
# extern crate tokio;
#
use cucumber::{writer, World as _};
# #[derive(cucumber::World, Debug, Default)]
# struct World;
#
# #[tokio::main]
# async fn main() {
World::cucumber()
.with_writer(writer::Libtest::or_basic())
.run("tests/features/book")
.await;
# }
NOTE: There are currently 2 caveats with IntelliJ Rust integration:
- Because of output interpretation issue, current timing reports for individual tests are accurate only for serial tests (or for all in case
--concurrency=1
CLI option is used);- Although debugger works, test window may select
Step
that didn't trigger the breakpoint. To fix this, use--concurrency=1
CLI option.
TIP: In the multi-crate Cargo workspace, to support jump-to-definition in the reported paths (step or its matcher definition) correctly, consider to define
CARGO_WORKSPACE_DIR
environment variable in the.cargo/config.toml
file:[env] CARGO_WORKSPACE_DIR = { value = "", relative = true }
Only a small subset of libtest
harness is supported to integrate with other tools:
- Only
--format=json
output (JUnit
support is done separately); --report-time
option;--show-output
option.