Matt Wynne wrote:
On 11 Apr 2009, at 01:07, James Byrne wrote:
http://mwrc2009.confreaks.com/14-mar-2009-15-00-bdd-with-cucumber-ben-mabey.html
Great job with the talk Ben, it's a really good intro to Cucumber and
I will be pointing anyone who asks towards it.
One question about the kitten-killing. I was surprised that defining
methods in your env / step_definition files adds methods to *every
instance* of Object. I thought it just added those methods to the
particular instance of Object that's used to create the World.
Did I misunderstand the you in the talk, or misunderstand the code in
Cucumber?
Well, the step definitions themselves don't add themselves to every
instance. The Given, When, and Then methods have actually killed some
kittens and already live on Object (sometimes it is okay). The step
methods will register the passed in blocks to the StepMother-- not onto
Object. So if that is what you are referring to you are correct.
However, if you want to create a ruby helper method then you will need
to wrap it in a module to prevent to from being added to every object
instance. In my example I had something like:
def login_as(user)
visit '/login'
fill_in 'Email', :with => user.email
fill_in 'Password', :with => 'password'
click_button
end
If you place that method in the top-level in either your env.rb or any
step files it is going to be living on Object since Cucumber will load
up these files as any other ruby file. So you could call #login_as on
an Array or any other object! Definitely not what we want. So, you
need to wrap it in a module and use the World hook to make the helper
methods available only in your World (which you get a new one for every
scenario). With the new World syntax (as of 0.2.3 I believe) it would be:
module UserHelpers
def login_as(user)
visit '/login'
fill_in 'Email', :with => user.email
fill_in 'Password', :with => 'password'
click_button
end
end
World(UserHelpers)
I feel like I may of just repeated what I said in the presentation... so
you still may be just as confused. :/ Let me know if that helps to
clarify things or what part of it is confusing.
-Ben
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users