[Cucumber] Struggling with "multiple step definitions"


#1

Hey gang,

I find myself struggling with multiple step definitions in cucumber
all the time. I regularly test the contents of my flash[:notice] in
steps, since I think that’s part of the behaviour of the app. So,
while implementing a new feature, I ran into the following error:

/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.1.15/bin/…/lib/cucumber/
step_mother.rb:81:in `regexp_args_proc’: Multiple step definitions
match “zou ik een melding moeten zien dat de reactie gemarkeerd is als
spam”: (Cucumber::Multiple)

features/steps/comments.rb:93:in /^zou ik een melding moeten zien dat de reactie gemarkeerd is als spam$/' features/steps/common.rb:9:in/^zou ik een melding moeten zien dat de|
het (.*?) is opgeslagen$/’

Even those who aren’t fluent in Dutch (since that’s what the steps are
written in), it’s clearly not the same step… I am no regex wizard,
so I might do something horribly wrong with my steps, but I do like to
know how I can fix this.

Any ideas?
thanks,
bartz


#2

Bart Z. wrote:

Hey gang,

Multiple step definitions

That’s because you have defined more than once a step, so instead of
defining the same step for each feature, group step definitions by
resource / domain concept / model / whatever-you-call-it for instance.
here is a good documentation:

http://wiki.github.com/aslakhellesoy/cucumber/step-organisation


On demand video training for distance learners: http://www.digiprof.fr


#3

On Sat, Jan 17, 2009 at 10:48 PM, Bart Z.
removed_email_address@domain.invalidwrote:

features/steps/comments.rb:93:in /^zou ik een melding moeten zien dat de reactie gemarkeerd is als spam$/' features/steps/common.rb:9:in/^zou ik een melding moeten zien dat de|het
(.*?) is opgeslagen$/’

Even those who aren’t fluent in Dutch (since that’s what the steps are
written in), it’s clearly not the same step… I am no regex wizard, so I
might do something horribly wrong with my steps, but I do like to know how I
can fix this.

Step 1) Use rubular.com. It rocks. For this example you’ll see that your
string matches both regexen (and where in the regexen they match)

Step 2) Avoid | in Step definitions if you can. They often work against
the
idea of a Ubiquitous Language.
You can read more about this here:
http://www.nabble.com/Help-with-regexp-in-matcher-to21425148.html
I realise that in your case you’re using | to work around Dutch grammar
(several ways to say “the”), and in this case I think | is ok.

You probably wanted this:

/^zou ik een melding moeten zien dat (?:de|het) (.*) is opgeslagen$/

Ik hoop dat dit helpt :slight_smile:

Aslak


#4

On 18 jan 2009, at 01:25, aslak hellesoy wrote:

cucumber/step_mother.rb:81:in `regexp_args_proc’: Multiple step
wizard, so I might do something horribly wrong with my steps, but I
do like to know how I can fix this.

Step 1) Use rubular.com. It rocks. For this example you’ll see that
your string matches both regexen (and where in the regexen they match)

Ah, great tip! I managed to write this regex, which did exactly what I
wanted:

/^zou ik een melding moeten zien dat (de|het) (.*?) is opgeslagen$/

Step 2) Avoid | in Step definitions if you can. They often work
against the idea of a Ubiquitous Language.
You can read more about this here: http://www.nabble.com/Help-with-regexp-in-matcher-to21425148.html
I realise that in your case you’re using | to work around Dutch
grammar (several ways to say “the”), and in this case I think | is ok.

I’ll read up on that thread, and hopefully find some good arguments to
drop the first person, since I think that’s the most descriptive.

You probably wanted this:

/^zou ik een melding moeten zien dat (?:de|het) (.*) is opgeslagen$/

Ik hoop dat dit helpt :slight_smile:

Nice one! That is correct :slight_smile:

thanks a million, once again!
bartz