¿Cuál es la mejor práctica para la creación de asociaciones con factory_girl de pepino?
-
16-09-2019 - |
Pregunta
I normalmente utilizar este paso para configurar los registros con factory_girl:
Given /^the following (.+) records?:$/ do |factory, table|
table.hashes.each do |hash|
Factory(factory, hash)
end
end
Y aquí está mi trabajo en torno a la hora de establecer asociaciones:
Given the following group record:
| id | name |
| 1 | foo |
And the following item records:
| name | group_id |
| bar | 1 |
| baz | 1 |
# ...
Sé que esto es malo. El uso de los identificadores hace que todo sea frágil y críptica de la vista de la persona de dominio.
Por lo tanto, mi pregunta es - lo que sería la mejor práctica para establecer una asociación con factory_girl y un argumento tabla como la anterior
Solución 2
Sólo para responder a mi propia pregunta: salmuera
Otros consejos
Se pueden definir varias asociaciones en una fábrica.
Como la siguiente:
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
Hacer una Factory(:group)
creará su uplet grupo con dos elementos en ella.
Puede utilizar los pasos factorygirl pepino definidos:
https://github.com/thoughtbot/factory_girl/blob/master /lib/factory_girl/step_definitions.rb
Puede configurar sus artículos y su grupo (s) en el paso sólo un pepino:
Given the following items exists:
| Name | Group |
| Foo | Name: Bar |
| Foam | Name: Bar |
| Food | Name: Bar |
Al hacerlo así, la creación de grupo 'Bar' está utilizando la funcionalidad 'find_or_create_by', por lo que la primera llamada crea el grupo, los próximos 2 llamadas encuentra el grupo ya creado.
De esta manera los 3 artículos tendrán un mismo grupo 'Bar', y usted puede crear tantos elementos agrupados como sea necesario.