Какая наилучшая практика для создания ассоциаций с factory_girl в огурце?

Обычно я использую этот шаг для настройки записей с помощью 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 |
 # ...

Я знаю, что это плохо. Использование ids делает все это хрупким и загадочным с точки зрения лица домена.

Итак, мой вопрос: что было бы лучше всего настроить связь с factory_girl и аргументом таблицы, подобным приведенному выше?

3 ответа

Просто, чтобы ответить на мой собственный вопрос: Pickle


Вы можете определить несколько ассоциаций в factory. Как показано ниже:

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) создаст ваш групповой uplet с двумя элементами в нем.


Вы можете использовать определенные шаги FactoryGirl Cucumber: https://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/step_definitions.rb

Вы можете настроить свои объекты и группы (ов) всего за один шаг огурца:

Given the following items exists:
 | Name | Group |
 | Foo | Name: Bar |
 | Foam | Name: Bar |
 | Food | Name: Bar |

При этом создание группы "Bar" использует функцию "find_or_create_by", поэтому первый вызов создает группу, а следующие 2 вызова обнаруживают уже созданную группу.

Таким образом, все 3 элемента будут иметь одну и ту же группу "Бар", и вы можете создать столько группируемых элементов, сколько вам нужно.

licensed under cc by-sa 3.0 with attribution.