Collective Idea

Collective Idea Logo

Brandon Keepers

Practical Cucumber: Factory Girl steps

By Brandon Keepers on September 09, 2010 in bdd and cucumber

This post is part of our Practical Cucumber series.

Did you know that factory_girl comes with some really useful cucumber steps? You’re not alone, even though they’ve been around for a while.

Simply require them in your cucumber env.rb file:

require "factory_girl/step_definitions"

Then you can begin using them in your features:

Given a user exists with an email of "brandon@example.com"
And the following categories exist:
  | Name     |
  | Cucumber |
  | BDD      |
And the following article exists:
  | Title                       | Body   | Published at |
  | Factory Girl cucumber steps | lorem… | 2010-09-10   |

One of my favorite features of the factory_girl steps is that you can also specify associations:

Given the following user exists:
  | Name    | Email               |
  | Brandon | brandon@example.com |
And the following articles exist:
  | Title     | Author        |
  | Article 1 | Name: Brandon |
  | Article 2 | Name: Daniel  |

To make this to work, declare your associations in the factory and the steps will try to find or create by the association attribute.

Factory.define :article do |m|
  m.sequence(:title) {|i| "Article #{i}" }
  m.association :author, :factory => :user
end

Stop wasting time writing basic steps for creating models and spend your time working on the application.

This post is part of our Practical Cucumber series.

By Brandon Keepers on September 09, 2010 in bdd and cucumber

13 Comments

  1. Jeremy D. Frens

    Jeremy D. Frens September 09, 2010 http://www.norecess.org/

    In the words of Johnny Carson (through the voice of Dana Carvey), “I… I did not know that.”  But I’m very happy I do now; that’s awesome.

  2. Torey Heinz

    Torey Heinz September 09, 2010 http://ihswebdesign.com

    I have been using Machinist lately and didn’t find any cucumber steps like these, so right away I hacked together some Machinist steps. http://ihswebdesign.com/blog/machinist-steps/

    Might be helpful to someone.

  3. DAvid

    DAvid September 27, 2010

    That really good to know. Thanks for this great tip!

  4. Manu

    Manu October 29, 2010 http://manuraghavan.net

    Thank you, I found this useful

  5. Manu

    Manu October 29, 2010 http://manuraghavan.net

    Thank you, I found this useful

  6. neohomerico

    neohomerico December 14, 2010

    Thanks for sharing

  7. John

    John February 26, 2011

    thanks

  8. Dorian

    Dorian May 18, 2011

    That’s very interesting indeed. However i get the following error

    Undefined step: “the following user exists:” (Cucumber::Undefined exception)

    (i’ve installed all the required gems and updated the cucumbre env.rb file)

    Any hints on how to fix that? Thanks!

  9. Daniel Morrison

    Daniel Morrison May 18, 2011 http://collectiveidea.com

    Dorian, I know exactly what it is because I got stuck here a couple months ago, even though I’ve done this tons of times.

    Make sure you have a user factory defined. It isn’t enough to just have the model, you have to have the factory defined too. 

    Hope that solves it!

  10. Al

    Al March 21, 2012

    Is there a way to do this without tables?

  11. Matthew Hassfurder

    Matthew Hassfurder July 02, 2012 http://matthew.hassfurder.com

    Alas, it appears these are to be removed in 4.0.

    http://robots.thoughtbot.com/post/25650434584/writing-better-cucumber-scenarios-or-why-were

  12. Andrew

    Andrew August 31, 2012 http://www.andrewhavens.com

    Ah, yes, these factory_girl steps have been removed. I wondered why I couldn’t get it to work. I should also remember check the date of when articles are written. =/

  13. Daniel Morrison

    Daniel Morrison August 31, 2012 http://collectiveidea.com

    Good point. Time for us to update the post!

Post a Comment

Contact Us

Find us on Google Maps
Collective Idea
44 East 8th Street, Suite 410
Holland, Michigan 49423 USA 42.790334-86.105251

Follow us on the Interwebs

We are currently available for medium and long term projects. Please get in touch if we can be of service.