Как лучше всего настроить ассоциации с Factory_girl в огурце?

StackOverflow https://stackoverflow.com/questions/1673533

Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top