[rspec-users] [cucumber] Features with multiple user iterations ¿?

Joseph Wilk joe at josephwilk.net
Wed Jan 21 09:35:47 EST 2009

Juanma Cervera wrote:
> I am specing a feature, maybe at more high level of what it should be,
> and this makes scenarios that involves more that one rails controller.
> Is it possible or convenient?
I do not think its a problem touching multiple controllers if that's 
what is required for the user to achieve some specific value from the 
system. The value is king.

> I have scenarios like this (although it's only an unreal example):
> Feature: Making a reservation for a service.
>   Scenario: Making the reservation
>     Given I want to make a reservation for a service
>     When I choose the service
>     Then I see the page 'service1/1/options'
>     When I select option 1
>     And I click on "submit"
>     Then I will be asked for a confirmation
>     When I answer 'Yes'
>     Then I see "Ok"
>     And I go to "/services/1"
> Is this ok or I should define the features with only one single
> iteration?
I find deviating from the ordering of Given/When/Then can sometimes 
produce scenarios that are hard to read and conceptualise. So  I 
personally avoid multiple iterations in a single scenario. This however 
does not mean you should not touch multiple controllers.

I would suggest perhaps something like this for your example scenario:

  Scenario: Making a successful reservation for massage service
    Given I have gone to the reservation page
    And I selected the service "massage"
    When I choose the option "extra oil"
    And I press the "make reservation" button
    And I confirm my reservation
    Then I will see "Ok, your reservation has been made for blah. Thanks!"
    And I will see the total price
    And I will be redirected to the service.
  Scenario: Making a reservation but cancelling at confirmation

My scenario would still fail based on the 'thens' you mention. For example if I don't see the page 'service1/1/options' then I can never click the option for extra oil. So your thens have become implied. They are part of the journey, the destination (and value) is seeing I've made a reservation.

Looking at your initial steps this one jumps out at me:

    Given I want to make a reservation for a service

While it gives intent and a goal it does not explain the start state so 
I would question its usefulness. It feels more like the scenario name.

Joseph Wilk
> Juanma Cervera.

More information about the rspec-users mailing list