Quelle est la meilleure pratique pour la création d'associations avec factory_girl dans le concombre?

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

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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top