Cucumber: Group Given, Whens and Thens

Hi,

Do you think this is a satisfactory way to group step files related to
one feature

e.g.

publish_content_givens
publish_content_whens
publish_content_thens

?

Thanks

Aidy

Have a read of this:
http://github.com/aslakhellesoy/cucumber/wikis/step-organisation

Basically rather than saving your steps in files named around the
feature, it’s better to group them around the object(s) they work on.

Also occasionally you may want to use a when as a given. Cucumber
doesn’t actually use the given|when|then|and to differentiate steps,
just the regex that comes after them. Sometimes I feel that it makes
sense as in the following examples

When I log in as Fred
....

Given I log in as Fred

When I’m writing the login feature I’d use the first statement, but
when I’m testing foo as a logged in user I’d use the second. Both
would use the same step.

Now I realise that this counters the excellent advice given on the
step-organisation page of the wiki. However I think in this case even
though the step is definitely a when it should be allowed to be used
as a Given in some stories as its definitely a setup step rather than
an interaction step in certain|most contexts

Finally Cucumber tells you which step is matching your feature so
there is much less need to organise steps by given|when… then there
was with the previous story runner

All best

Andrew

2008/11/20 aidy lewis [email protected]:

On 20 Nov 2008, at 22:05, David C. wrote:

On Thu, Nov 20, 2008 at 10:40 AM, Andrew P.
[email protected] wrote:

I actually prefer to keep these separate:

Given I am logged in as Fred
When I log in as Fred

+1, though these days I would probably have the When step matcher call
the Given step directly.

cheers,
Matt

Interesting … so this establishes a convention to use in features
that all Givens are written in the past tense and all whens in the
present tense.

I think its quite important as your feature count grows that you have
conventions to stop getting to much step duplication

e.g.

when I create a foo with a price of £24
when I have a foo whose price is £24
when I have a foo priced at £24

are all the same, and whilst you could write a more complex regex to
match all 3 (i think) it would be much better to apply a general
convention about how you write features to deal with this

I thinks convention is probably a hangover from the old story runner
days and isn’t quite so essential with cucumber, but it does seem to
be quite a good way to restrict your choice of language constructions
in your features which is a good thing if you want to have a
consistent style

Look like I’ve got alot of Givens to rewrite :slight_smile:

2008/11/20 David C. [email protected]:

On Thu, Nov 20, 2008 at 10:40 AM, Andrew P. [email protected]
wrote:

When I’m writing the login feature I’d use the first statement, but
when I’m testing foo as a logged in user I’d use the second. Both
would use the same step.

Now I realise that this counters the excellent advice given on the
step-organisation page of the wiki. However I think in this case even
though the step is definitely a when it should be allowed to be used
as a Given in some stories as its definitely a setup step rather than
an interaction step in certain|most contexts

I actually prefer to keep these separate:

Given I am logged in as Fred
When I log in as Fred

And then have each call out to a helper method named login_as(name).

This reduces the duplication in the code in the steps, but allows me
to be consistent about the distinctions I make between how Givens and
Thens are expressed.

WDYT?

David

“David C.” [email protected] writes:

I actually prefer to keep these separate:
WDYT?

David

This is what I do.

Pat

DOH
I thinks convention = I think this convention

2008/11/21 Andrew P. [email protected]:

On Fri, Nov 21, 2008 at 4:35 AM, Andrew P. [email protected]
wrote:

Interesting … so this establishes a convention to use in features
that all Givens are written in the past tense and all whens in the
present tense.

Actually, I put both in the present tense, but Givens describe states
(“there are…” or “___ is…”), while Whens specify an action (“I
create…”).

Peeja

Yeh that just shows how bad my grammer is! Saying that ‘there is’ /
‘there are’ is past tense, really meant ‘something that has already
happened’ … or ‘states’ as you so concisely put it :slight_smile:

Thanks

Andrew

2008/11/23 Peter J. [email protected]:

On Thu, Nov 20, 2008 at 8:05 PM, David C. [email protected]
wrote:

I actually prefer to keep these separate:
WDYT?
I also keep both steps separate, but just call the When from inside the
Given

Given “a user logged in as $name” do |name|
When “I log in as #{name}”
end

Given “an anonymous user” do
When “I log out”
end

When “I log in as $name” do |name|
post ‘/sessions’, :login => name, :password => ‘monkey’
end

When “I log out” do
get “/logout”
end

etc

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs