cucumber_rust 0.2.1

An implementation of the Cucumber testing framework for Rust. Fully native, no external test runners or dependencies
Documentation

cucumber-rust

An implementation of the Cucumber testing framework for Rust. Fully native, no external test runners or dependencies.

Usage

Create a directory called tests/ in your project root and create a test target of your choice. In this example we will name it cucumber.rs.

Add this to your Cargo.toml:

[[test]]
name = "cucumber"
harness = false # Allows Cucumber to print output instead of libtest

[dev-dependencies]
cucumber = "^0.1"

Create a directory called features/ and put a feature file in it named something like example.feature. It might look like:

Feature: Example feature

  Scenario: An example scenario
    Given I am trying out Cucumber
    When I consider what I am doing
    Then I am interested in ATDD
    And we can implement rules with regex

And here's an example of implementing those steps using our tests/cucumber.rs file:

#[macro_use]
extern crate cucumber;

pub struct World {
    // You can use this struct for mutable context in scenarios.
}

impl std::default::Default for World {
    fn default() -> World {
        // This function is called every time a new scenario is started
        World { }
    }
}

cucumber! {
    features: "./features"; // Path to our feature files
    world: World; // Any type that implements Default can be the world

    given "I am trying out Cucumber" |world| {
        // Set up your context in given steps
    };

    when "I consider what I am doing" |world| {
        // Take actions
    };

    then "I am interested in ATDD" |world| {
        // Check that the outcomes to be observed have occurred
    };

    then regex r"^we can (.*) rules with regex$" |world, matches| {
        // And access them as an array
        assert!(matches[1] == "implement");
    };
}

The full gamut of Cucumber's Gherkin language is implemented by the gherkin-rust project. Features such as data tables and docstrings will be progressively implemented prior to v1.0.0.

License

This project is licensed under either of

at your option.