/ / Как мога да дефинирам множество свързани обекти с помощта на Factory Girl? - рубин на релси, тестване на единица, тестване, фабричен бот

Как мога да определям няколко свързани обекта с фабрика Girl? - руби-на-релси, тестване на единица, тестване, фабрика-бот

Документите от Factory Girl предлагат този синтаксис за създаване (предполагам) асоциации родители-деца ...

  Factory.define :post do |p|
p.author {|a| a.association(:user) }
end

Публикацията принадлежи на Потребител (нейния "автор").

Какво става, ако искате да определите Фабрика за създаване Users, които имат куп Postс?

Или какво ще стане, ако това е ситуация много към много (вижте актуализация по-долу например)?


UPDATE

Мислех, че съм го измислил. Опитах това ...

Factory.define(:user) do |f|
f.username { Factory.next(:username) }

# ...

f.roles { |user|
[
Factory(:role),
Factory(:role, {:name => "EDIT_STAFF_DATA"})
]
}
end

Първоначално изглеждаше, че работи, но след това получих грешки при валидиране, защото F.G. се опитваше да спаси потребителя два пъти със същото потребителско име и имейл.

Така че се връщам към първоначалния си въпрос. Ако имате връзка между мнозина, както кажете Users и Roles, как можете да определите фабрика, която ще се върне Users с някои свързани Roles? Отбележи, че Roles трябва да е уникален, така че не мога да имам F.G. създаване на нов „ADMIN“ Role в БД всеки път, когато създава a User.

Отговори:

5 за отговор № 1

Не съм сигурен дали това е най-правилният начин да го направите, но работи.

Factory.define(:user) do |u|
u.login "my_login"
u.password "test"
u.password_confirmation "test"
u.roles {|user| [user.association(:admin_role),
user.association(:owner_role, :authorizable_type => "User", :authorizable_id => u.id) ]}
end

4 за отговор № 2

Виж: http://railsondave.blogspot.com/2009/05/creating-hasmany-through-factories-with.html


1 за отговор № 3

Скорошно актуализация на момичето фабрика позволява асоциации да бъдат зададени с блокове за обратно извикване


1 за отговор № 4

Създадох един active_factory плъгин, която се занимава с вашата ситуация в спецификации като тази:

models { user - posts(3) }

Ако има интерес, може да се опитам да създам интеграция с factory_girl фабрики.