[rspec-users] [cucumber] Features with multiple user iterations ¿?
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
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.
> Juanma Cervera.
More information about the rspec-users