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.
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:
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$/
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
Nice one! That is correct
thanks a million, once again!
bartz
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.