Coulda - Simplifying BDD

Coulda is YAFTL*. It's a little guy that stands on the shoulders of giants.

Seriously speaking, Coulda is an internal DSL that is similar to RSpec StoryRunner, the predecessor of Cucumber's Gherkin external DSL.

When used, it can look like this:

Feature "Define a feature" do
    in_order_to "write acceptance tests with less code"
    as_a "developer"
    i_want_to "use a simple internal DSL"
  
    Scenario "Demonstrate how coulda works" do
      Given "a pending prereq" do
        # Precondition code could go here
      end 
  
      When "something happens" do
        # Behavior to test invoked here
      end
  
      Then "expect something else" do
        # Assertions on result of behavior go here
      end
    end
  end

But it can also be easily rendered as plain text (via a rake task) to look like this:

Feature: Define a feature
  In order to write acceptance tests with less code
  As a developer
  I want to use a simple internal DSL
  
  Scenario: Demonstrate how coulda works
    Given a pending prereq
    When something happens
    Then expect something else

Getting Started

Install the gem:

sudo gem install coulda

(unless you're using RVM -- which you probably should be in which case it's "gem install coulda")

Then write some user stories/features/specs/tests/acceptance tests/your-name-du-jour-for-a-descriptive-testing-artifact

Rendering stories as text

It's this easy:

RAILS_ENV=test rake coulda:print_features

And then you get this:

Feature: Define a feature
  In order to write acceptance tests with less code
  As a developer
  I want to use a simple internal DSL
  
  Scenario: Demonstrate how coulda works
    Given a pending prereq
    When something happens
    Then expect something else