cucumber does stuff
Cargo Check, Format, Fix and Test / cargo CI (push) Failing after 1m20s
Details
Cargo Check, Format, Fix and Test / cargo CI (push) Failing after 1m20s
Details
This commit is contained in:
parent
c5498b5b12
commit
03a972366b
File diff suppressed because it is too large
Load Diff
|
@ -5,4 +5,11 @@ edition = "2021"
|
|||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
[dev-dependencies]
|
||||
futures = "0.3.30"
|
||||
cucumber = "0.20.2"
|
||||
tokio = { version = "1.10", features = ["macros", "rt-multi-thread", "time"] }
|
||||
|
||||
[[test]]
|
||||
name = "example" # this should be the same as the filename of your test target
|
||||
harness = false # allows Cucumber to print output instead of libtest
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
// see tests/example.rs
|
|
@ -1,3 +0,0 @@
|
|||
fn main() {
|
||||
println!("Hello, world!");
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
use cucumber::{given, then, when, World};
|
||||
|
||||
// These `Cat` definitions would normally be inside your project's code,
|
||||
// not test code, but we create them here for the show case.
|
||||
#[derive(Debug, Default)]
|
||||
struct Cat {
|
||||
pub hungry: bool,
|
||||
}
|
||||
|
||||
impl Cat {
|
||||
fn feed(&mut self) {
|
||||
self.hungry = false;
|
||||
}
|
||||
}
|
||||
|
||||
// `World` is your shared, likely mutable state.
|
||||
// Cucumber constructs it via `Default::default()` for each scenario.
|
||||
#[derive(Debug, World)]
|
||||
// Accepts both sync/async and fallible/infallible functions.
|
||||
// We can set a non default constructor like this vvvv
|
||||
#[world(init = Self::new)]
|
||||
pub struct AnimalWorld {
|
||||
cat: Cat,
|
||||
}
|
||||
|
||||
// new constructor
|
||||
impl AnimalWorld {
|
||||
fn new() -> Self {
|
||||
Self {
|
||||
cat: Cat { hungry: true },
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Steps are defined with `given`, `when` and `then` attributes.
|
||||
#[given(regex = r"^a (hungry|satiated) cat$")]
|
||||
async fn hungry_cat(world: &mut AnimalWorld, state: String) {
|
||||
match state.as_str() {
|
||||
"hungry" => world.cat.hungry = true,
|
||||
"satiated" => world.cat.hungry = false,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
#[when("I feed the cat")]
|
||||
async fn feed_cat(world: &mut AnimalWorld) {
|
||||
world.cat.feed();
|
||||
}
|
||||
|
||||
#[then("the cat is not hungry")]
|
||||
async fn cat_is_fed(world: &mut AnimalWorld) {
|
||||
assert!(!world.cat.hungry);
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
futures::executor::block_on(AnimalWorld::run("tests/features/book/animal.feature"));
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
Feature: Animal feature
|
||||
|
||||
Scenario: If we feed a hungry cat it will no longer be hungry
|
||||
Given a hungry cat
|
||||
When I feed the cat
|
||||
Then the cat is not hungry
|
||||
|
||||
Scenario: If we feed a satiated cat it will not become hungry
|
||||
Given a satiated cat
|
||||
When I feed the cat
|
||||
Then the cat is not hungry
|
Loading…
Reference in New Issue