| Crates.io | cucumber |
| lib.rs | cucumber |
| version | 0.21.1 |
| created_at | 2016-03-29 22:20:51.444946+00 |
| updated_at | 2024-06-16 15:13:48.799079+00 |
| description | Cucumber testing framework for Rust, with async support. Fully native, no external test runners or dependencies. |
| homepage | https://github.com/cucumber-rs/cucumber |
| repository | https://github.com/cucumber-rs/cucumber |
| max_upload_size | |
| id | 4611 |
| size | 571,968 |
An implementation of the Cucumber testing framework for Rust. Fully native, no external test runners or dependencies.
Describe testing scenarios in .feature files:
Feature: Eating too much cucumbers may not be good for you
Scenario: Eating a few isn't a problem
Given Alice is hungry
When she eats 3 cucumbers
Then she is full
Implement World trait and describe steps:
use std::time::Duration;
use cucumber::{given, then, when, World as _};
use tokio::time::sleep;
#[derive(cucumber::World, Debug, Default)]
struct World {
user: Option<String>,
capacity: usize,
}
#[given(expr = "{word} is hungry")] // Cucumber Expression
async fn someone_is_hungry(w: &mut World, user: String) {
sleep(Duration::from_secs(2)).await;
w.user = Some(user);
}
#[when(regex = r"^(?:he|she|they) eats? (\d+) cucumbers?$")]
async fn eat_cucumbers(w: &mut World, count: usize) {
sleep(Duration::from_secs(2)).await;
w.capacity += count;
assert!(w.capacity < 4, "{} exploded!", w.user.as_ref().unwrap());
}
#[then("she is full")]
async fn is_full(w: &mut World) {
sleep(Duration::from_secs(2)).await;
assert_eq!(w.capacity, 3, "{} isn't full!", w.user.as_ref().unwrap());
}
#[tokio::main]
async fn main() {
World::run("tests/features/readme").await;
}
Add test to Cargo.toml:
[[test]]
name = "readme"
harness = false # allows Cucumber to print output instead of libtest

For more examples check out the Book (current | edge).
macros (default): Enables step attributes and auto-wiring.
timestamps: Enables timestamps collecting for all Cucumber events.
output-json (implies timestamps): Enables support for outputting in Cucumber JSON format.
output-junit (implies timestamps): Enables support for outputting JUnit XML report.
libtest (implies timestamps): Enables compatibility with Rust libtest's JSON output format. Useful for IntelliJ Rust plugin integration.
tracing: Enables integration with tracing crate.
The full gamut of Cucumber's Gherkin language is implemented by the gherkin crate. Most features of the Gherkin language are parsed already and accessible via the relevant structs.
Scenario Outline is treated the same as Outline or Example in the parser (gherkin/#19).
This project is licensed under either of
at your option.