Let’s say you have the following mongoid documents:
class User include Mongoid::Document embeds_one :name end class UserName include Mongoid::Document field :first field :last_initial embedded_in :user end
How do you create a factory girl factory which initializes the embedded first name and last initial? Also how would you do it with an embeds_many
relationship?
I was also looking for this one and as I was researching I've stumbled on a lot of code and did pieced them all together (I wish there were better documents though) but here's my part of the code. Address is a 1..1 relationship and Phones is a 1..n relationship to events.
factory :event do title 'Example Event' address { FactoryGirl.build(:address) } phones { [FactoryGirl.build(:phone1), FactoryGirl.build(:phone2)] } end factory :address do place 'foobar tower' street 'foobar st.' city 'foobar city' end factory :phone1, :class => :phone do code '432' number '1234567890' end factory :phone2, :class => :phone do code '432' number '0987654321' end
(And sorry if I can't provide my links, they were kinda messed up)
Here is a solution that allows you to dynamically define the number of embedded objects:
FactoryGirl.define do factory :profile do name 'John Doe' email '[email protected]' user factory :profile_with_notes do ignore do notes_count 2 end after(:build) do |profile, evaluator| evaluator.notes_count.times do profile.notes.build(FactoryGirl.attributes_for(:note)) end end end end end
This allows you to call FactoryGirl.create(:profile_with_notes)
and get two embedded notes, or call FactoryGirl.create(:profile_with_notes, notes_count: 5)
and get five embedded notes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With