Faker is producing duplicate data when used in factory_girl Faker is producing duplicate data when used in factory_girl ruby-on-rails ruby-on-rails

Faker is producing duplicate data when used in factory_girl


Factory.define :user do |user|  user.first_name { Faker::Name::first_name }  user.last_name { Faker::Name::last_name }  user.sequence(:email) {|n| "user#{n}@blow.com" }end

Try putting brackets around the fakers. see this link


Note that Faker may still be providing duplicate data due to the limited amount of fake data available.

For simple testing purposes and to get by uniqueness validations, I've used the following:

sequence(:first_name) {|n| Faker::Name::first_name + " (#{n})"}sequence(:last_name) {|n| Faker::Name::last_name + " (#{n})"}


For the sake of preserving the correct answer, here it is translocated from the blog, I take no credit for the answer.

If you use the code below, faker will not churn out unique names

Factory.define :user do |u|  u.first_name Faker::Name.first_name  u.last_name Faker::Name.last_nameend

However putting curly braces around faker makes it work!

Factory.define :user do |u|  u.first_name { Faker::Name.first_name }  u.last_name { Faker::Name.last_name }end

To explain why, the first example is producing the same names. It's only evaluating once. The second example evaluates every time the factory is used.

This is due to the {} providing lazy evaluation. Essentially they are providing a proc/lambda with the Faker call as their return value.