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

?
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top