Forum: RSpec Cucumber: Group Given, Whens and Thens

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ee6788c2faaad7a5cd0bc466c9ea60d8?d=identicon&s=25 aidy lewis (Guest)
on 2008-11-20 16:29
(Received via mailing list)
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
Cdf378de2284d8acf137122e541caa28?d=identicon&s=25 Matt Wynne (mattwynne)
on 2008-11-20 16:49
(Received via mailing list)
Have a read of this:
http://github.com/aslakhellesoy/cucumber/wikis/ste...

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.
85d99e7678d8720f6e00ab0f60fe6ea9?d=identicon&s=25 Andrew Premdas (Guest)
on 2008-11-20 17:41
(Received via mailing list)
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 <aidy.lewis@googlemail.com>:
5d38ab152e1e3e219512a9859fcd93af?d=identicon&s=25 David Chelimsky (Guest)
on 2008-11-20 23:06
(Received via mailing list)
On Thu, Nov 20, 2008 at 10:40 AM, Andrew Premdas <apremdas@gmail.com>
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
Cdf378de2284d8acf137122e541caa28?d=identicon&s=25 Matt Wynne (mattwynne)
on 2008-11-21 01:46
(Received via mailing list)
On 20 Nov 2008, at 22:05, David Chelimsky wrote:
> On Thu, Nov 20, 2008 at 10:40 AM, Andrew Premdas
> <apremdas@gmail.com> 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
85d99e7678d8720f6e00ab0f60fe6ea9?d=identicon&s=25 Andrew Premdas (Guest)
on 2008-11-23 01:48
(Received via mailing list)
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 :)


2008/11/20 David Chelimsky <dchelimsky@gmail.com>:
85d99e7678d8720f6e00ab0f60fe6ea9?d=identicon&s=25 Andrew Premdas (Guest)
on 2008-11-23 03:29
(Received via mailing list)
DOH
I thinks convention = I think this convention

2008/11/21 Andrew Premdas <apremdas@gmail.com>:
42172acdf3c6046f84d644cb0b94642c?d=identicon&s=25 Pat Maddox (pergesu)
on 2008-11-24 00:16
(Received via mailing list)
"David Chelimsky" <dchelimsky@gmail.com> writes:

>>
> I actually prefer to keep these separate:
> WDYT?
>
> David

This is what I do.

Pat
D069ac0170dc6c93bad77734258fadae?d=identicon&s=25 Peter Jaros (Guest)
on 2008-11-24 16:56
(Received via mailing list)
On Fri, Nov 21, 2008 at 4:35 AM, Andrew Premdas <apremdas@gmail.com>
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
85d99e7678d8720f6e00ab0f60fe6ea9?d=identicon&s=25 Andrew Premdas (Guest)
on 2008-11-24 17:50
(Received via mailing list)
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 :-)

Thanks

Andrew

2008/11/23 Peter Jaros <peter.a.jaros@gmail.com>:
De03af350d099d28a0dd223ed5ffdd37?d=identicon&s=25 Nicolás Sanguinetti (Guest)
on 2008-11-24 18:02
(Received via mailing list)
On Thu, Nov 20, 2008 at 8:05 PM, David Chelimsky <dchelimsky@gmail.com>
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 topic is locked and can not be replied to.