Qual è la best practice per la creazione di associazioni con factory_girl in cetriolo?
-
16-09-2019 - |
Domanda
Io di solito uso questo passaggio per impostare record con factory_girl:
Given /^the following (.+) records?:$/ do |factory, table|
table.hashes.each do |hash|
Factory(factory, hash)
end
end
Ed ecco il mio lavoro in giro quando la creazione di associazioni:
Given the following group record:
| id | name |
| 1 | foo |
And the following item records:
| name | group_id |
| bar | 1 |
| baz | 1 |
# ...
So che questo è un male. Utilizzando ids rende il tutto fragile e criptico dal vantaggio della persona dominio.
Quindi, la mia domanda è - che cosa sarebbe la migliore prassi di costituire un'associazione con factory_girl e un argomento tavolo come quello sopra
Soluzione 2
Proprio per rispondere alla mia domanda: Pickle
Altri suggerimenti
È possibile definire più associazioni in una fabbrica.
Come il seguente:
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
Facendo un Factory(:group)
crea il tuo uplet gruppo con due elementi in esso.
È possibile utilizzare la procedura factorygirl cetriolo definiti:
https://github.com/thoughtbot/factory_girl/blob/master /lib/factory_girl/step_definitions.rb
È possibile impostare i tuoi articoli e il vostro gruppo (s) nel passo appena un cetriolo:
Given the following items exists:
| Name | Group |
| Foo | Name: Bar |
| Foam | Name: Bar |
| Food | Name: Bar |
Quando si fa in questo modo, la creazione di gruppo 'Bar' sta usando la funzionalità 'find_or_create_by', in modo che la prima chiamata crea il gruppo, i prossimi 2 chiamate trova il gruppo già creato.
In questo modo tutti i 3 elementi avranno stesso gruppo 'Bar', ed è possibile creare il maggior numero di elementi raggruppati di cui hai bisogno.