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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top