Factory Вложенные документы Girl + Mongoid в светильниках
Допустим, что у вас есть следующие документы:
class User
include Mongoid::Document
embeds_one :name
end
class UserName
include Mongoid::Document
field :first
field :last_initial
embedded_in :user
end
Как вы создаете factory девушку factory, которая инициализирует встроенное имя и последний начальный? Также как бы вы это сделали с отношением embeds_many
?
Ответы
Ответ 1
Я тоже искал этот, и когда я изучал, я наткнулся на много кода и собрал их все вместе (я бы хотел, чтобы у них были лучшие документы), но вот моя часть кода. Адрес - отношение 1..1, а телефоны - это отношение 1..n к событиям.
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
(И извините, если я не могу предоставить свои ссылки, они были перепутаны)
Ответ 2
Вот решение, которое позволяет динамически определять количество внедренных объектов:
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
Это позволяет вам вызвать FactoryGirl.create(:profile_with_notes)
и получить две встроенные заметки или вызвать FactoryGirl.create(:profile_with_notes, notes_count: 5)
и получить пять встроенных заметок.