Quelle est la meilleure pratique pour la création d'associations avec factory_girl dans le concombre?
-
16-09-2019 - |
Question
J'utilise normalement cette étape pour mettre en place des enregistrements avec factory_girl:
Given /^the following (.+) records?:$/ do |factory, table|
table.hashes.each do |hash|
Factory(factory, hash)
end
end
Et voici mon travail autour lors de la mise en place des associations:
Given the following group record:
| id | name |
| 1 | foo |
And the following item records:
| name | group_id |
| bar | 1 |
| baz | 1 |
# ...
Je sais que cela est mauvais. L'utilisation ids rend la chose fragile et cryptique de la vue de la personne de domaine.
Alors, ma question est - ce qui serait la meilleure pratique de mettre en place une association avec factory_girl et un argument de table comme celle-ci
La solution 2
Juste pour répondre à ma propre question: Pickle
Autres conseils
Vous pouvez définir plusieurs associations dans une usine.
Comme les éléments suivants:
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
Faire un Factory(:group)
va créer votre groupe uplet avec deux éléments qu'il contient.
Vous pouvez utiliser les étapes de concombre factorygirl définies:
https://github.com/thoughtbot/factory_girl/blob/master /lib/factory_girl/step_definitions.rb
Vous pouvez configurer vos articles et votre groupe (s) en une seule étape de concombre:
Given the following items exists:
| Name | Group |
| Foo | Name: Bar |
| Foam | Name: Bar |
| Food | Name: Bar |
Quand vous faites comme ça, la création de « Bar » groupe utilise la fonctionnalité de « find_or_create_by », de sorte que le premier appel crée le groupe, les 2 prochains appels trouve le groupe déjà créé.
De cette façon, tous les 3 articles auront un même groupe « Bar », et vous pouvez créer autant d'articles regroupés que vous avez besoin.