Как лучше всего настроить ассоциации с Factory_girl в огурце?
-
16-09-2019 - |
Вопрос
Обычно я использую этот шаг для настройки записей с помощью Factory_girl:
Given /^the following (.+) records?:$/ do |factory, table|
table.hashes.each do |hash|
Factory(factory, hash)
end
end
И вот мой обходной путь при настройке ассоциаций:
Given the following group record:
| id | name |
| 1 | foo |
And the following item records:
| name | group_id |
| bar | 1 |
| baz | 1 |
# ...
Я знаю, что это плохо.Использование идентификаторов делает все это хрупким и загадочным с точки зрения пользователя домена.
Итак, мой вопрос: как лучше всего установить связь с Factory_girl и аргументом таблицы, подобным приведенному выше?
Решение 2
Просто чтобы ответить на мой собственный вопрос: Соленый огурец
Другие советы
Вы можете определить несколько ассоциаций на фабрике.
Как следующее:
Factory.define :item do |item|
item.name "item_name"
end
Factory.define :group do |group|
group.name "group_name"
group.items { |items| [ items.association(:item), items.association(:item) ] }
end
Делаю Factory(:group)
создаст групповой аплет с двумя элементами в нем.
Вы можете использовать определенные шаги FactoryGirl Cucumber:
https://github.com/ Thoughtbot/factory_girl/blob/master/lib/factory_girl/step_definitions.rb
Вы можете настроить свои элементы и группы всего за один шаг Cucumber:
Given the following items exists:
| Name | Group |
| Foo | Name: Bar |
| Foam | Name: Bar |
| Food | Name: Bar |
При этом создание группы «Бар» использует функцию «find_or_create_by», поэтому первый вызов создает группу, следующие 2 вызова находят уже созданную группу.
Таким образом, все три элемента будут иметь одну и ту же группу «Панель», и вы сможете создать столько сгруппированных элементов, сколько вам нужно.