¿Cuál es la mejor práctica para la creación de asociaciones con factory_girl de pepino?

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

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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top