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