FactoryGirl + Faker - same data being generated for every object in db seed data FactoryGirl + Faker - same data being generated for every object in db seed data ruby-on-rails ruby-on-rails

FactoryGirl + Faker - same data being generated for every object in db seed data


You need to pass a block if you want the values re-evaluated for each instance created.

Instead of

email   Faker::Internet.email

try...

email   { Faker::Internet.email }


Using Faker to get uniqueness-passing attributes may be an anti-pattern. It may also be a bad idea to have Faker's semi-random output in tests - what if sometimes tests just fail and you are off to a wild goose chase just because Faker coughed up a value you did not expect?

Lately I have been using FactoryGirl's sequences to get predictable, yet uniqueness-passing values.

FactoryGirl.define do  factory :user do    sequence(:first_name, 1) { |n| "John#{n}" }    sequence(:last_name, 1) { |n| "Doe#{n}" }    sequence(:phone, 1) { |n| (111111111+n).to_s }                   sequence(:email, 1) { |n| "email#{n}@example.com" }            password              "password"    password_confirmation "password"  endendFactoryGirl.create(:user).email #=> "email1@example.com"FactoryGirl.create(:user).email #=> "email2@example.com"

Taken from Factory Girl tips @ http://arjanvandergaag.nl/blog/factory_girl_tips.html