Reputation: 26212
I'm using factory_bot to create objects in my test, here is a example of my factory:
factory :user do
name "John"
surname "Doe"
trait :with_photo do
ignore do
photo_count 1
end
after(:create) do |user, evaluator|
FactoryBot.create_list(:photo, evaluator.photo_count)
end
end
end
So I can create a user with photo like:
FactoryBot.create(:user, :with_photo)
Or without photo :
FactoryBot.create(:user)
Or create a list of users :
FactoryBot.build_list(:user, 5)
But how can I build a list of users with trait (trait being :with_photo
), if I wanted to create five of them with photo?
Note: FactoryBot was previously called FactoryGirl
Upvotes: 36
Views: 46007
Reputation: 17735
Doesn't this work? It should...
FactoryBot.build_list(:user, 5, :with_photo)
FactoryBot - Building or Creating Multiple Records
Upvotes: 80
Reputation: 1941
You can also pass multiple traits to create_list
and build_list
example;
factory :user do
name { "Friendly User" }
trait :male do
name { "John Doe" }
gender { "Male" }
end
trait :admin do
admin { true }
end
end
# creates 3 admin users with gender "Male" and name "Jon Snow" using the admin and male trait
build_list(:user, 3, :admin, :male, name: "Jon Snow")
create_list(:user, 3, :admin, :male, name: "Jon Snow")
Just make sure the traits comes after the number of records you wish to create, the last argument is a hash that would override the record attribute.
More on traits on the official docs
Upvotes: 9