[rspec-users] Reuse steps like a method call

Ben Mabey
Wed, 14 May 2008 17:53:29 -0000

Bryan Helmkamp wrote:
> If I have a step matcher defined as so:
>
> Given "a user named $username" do |username|
>  ....
> end
>
> Is there a way to call it from another step? For example:
>
> Given "a user named $username with a blog post |username|
>   given_a_user_named(username) # calls existing step code
>   # create a blog post
> end
>
> Cheers,
>
>
I''m not sure if you can call a step directly... I would be very
interested in that if you can.. But AFAIK the only option is to extract
it into a helper method an place it in Spec::Story::World.

So you would have:

Given "a user named $username" do |username|
 create_user_with_name(user_name)
end

Given "a user named $username with a blog post |username|
  create_user_with_name(user_name)
  # create a blog post
end

I typically do things with instance variables though.  So the "Given a user
named $username" step would set an instance variable named @username.
Then I would have a step that reads "$username has a blog post" that
would get the instance variable name and it would build a post off of that user.
The story would the read like:

Given a user named Joey
And Joey has a blog post


-Ben