Qual é a melhor prática para a criação de associações com factory_girl em pepino?
-
16-09-2019 - |
Pergunta
Eu normalmente usar esta etapa para configurar registros com factory_girl:
Given /^the following (.+) records?:$/ do |factory, table|
table.hashes.each do |hash|
Factory(factory, hash)
end
end
E aqui está o meu trabalho-around quando a criação de associações:
Given the following group record:
| id | name |
| 1 | foo |
And the following item records:
| name | group_id |
| bar | 1 |
| baz | 1 |
# ...
Eu sei que isso é ruim. Usando ids faz com que toda a coisa frágil e enigmática com a vantagem da pessoa domínio.
Então, minha pergunta é - qual seria a melhor prática para criar uma associação com factory_girl e um argumento de mesa como o descrito acima
?Solução 2
Apenas para responder a minha própria pergunta: Pickle
Outras dicas
Você pode definir várias associações em uma fábrica.
Como o seguinte:
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
Fazendo uma Factory(:group)
criará seu uplet grupo com dois itens.
Você pode usar as etapas FactoryGirl pepino definidos:
https://github.com/thoughtbot/factory_girl/blob/master /lib/factory_girl/step_definitions.rb
Você pode configurar seus itens e seu grupo (s) em apenas um passo Pepino:
Given the following items exists:
| Name | Group |
| Foo | Name: Bar |
| Foam | Name: Bar |
| Food | Name: Bar |
Ao fazê-lo assim, a criação de grupo 'Bar' está usando 'find_or_create_by' funcionalidade, então a primeira chamada cria o grupo, os próximos 2 chamadas encontra o grupo já criado.
Desta forma, todos os 3 itens terão mesmo grupo 'Bar', e você pode criar tantos itens agrupados como você precisa.