Did you know… Factory Girl includes some steps for your integration testing pleasure? They are currently available but remain relatively unknown.

Read the source at lib/factory_girl/step_definitions.rb. They make Direct Model Access a little easier from your Cucumber features.

example usage

Define your factories normally in test/factories.rb or spec/factories.rb:

Factory.define :user do |user|
  user.email                 { Factory.next(:email) }
  user.password              { "password"   }
  user.password_confirmation { "password"   }
end

Factory.define :author, :parent => :user do |author|
  author.after_create { |a| Factory(:article, :author => a) }
end

Factory.define :recruiter, :parent => :user do |recruiter|
  recruiter.is_recruiter { true }
end

Make sure Factory Girl is available in your config/environments/cucumber.rb:

config.gem 'factory_girl', :version => '>= 1.2.3'

Require Factory Girl’s step definitions in features/support/env.rb:

require 'factory_girl/step_definitions'

Then, write Cucumber features using the simple “create record” step:

Given a user exists

… or the “create record & set one attribute” step:

Given an author exists with an email of "author@example.com"

… or the “create record & set multiple attributes” step:

Given the following recruiter exists:
  | email            | phone number | employer name |
  | bill@example.com | 1234567890   | thoughtbot    |

avoid boilerplate

These steps will be available for all your factories, so stop writing boilerplate steps and shake what Factory Girl gave you.