2009-11-04 5 views
5

ich normalerweise diesen Schritt verwenden, um Datensätze mit factory_girl einzurichten:Was ist die beste Vorgehensweise zum Einrichten von Assoziationen mit factory_girl in Gurken?

Given /^the following (.+) records?:$/ do |factory, table| 
    table.hashes.each do |hash| 
    Factory(factory, hash) 
    end 
end 

Und hier ist meine Work-around, wenn Verbände einrichten:

Given the following group record: 
    | id | name | 
    | 1 | foo | 
And the following item records: 
    | name | group_id | 
    | bar | 1  | 
    | baz | 1  | 
    # ... 

Ich weiß, das ist schlecht. Die Verwendung von IDs macht das Ganze spröde und kryptisch aus der Sicht der Domain-Person.

Also meine Frage ist - Was wäre die beste Praxis, um eine Verbindung mit factory_girl und einem Tabellenargument wie dem oben genannten einzurichten?

Antwort

0

Nur meine eigene Frage zu beantworten: Pickle

3

Sie können mehrere Verknüpfungen in einer Fabrik definieren.
wie folgt aus:

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 

eine Factory(:group) Dadurch wird Ihre Gruppe uplet mit zwei Elemente darin erstellen.

+1

Der Trick hier ist, dass group.items ein Array zurückgeben sollte. Es hat eine Weile gedauert, bis ich das herausgefunden hatte. – jonnii

+0

Ja, das ist nicht leicht zu verstehen (aber zu sehen, wie es funktioniert, ist es logisch) –

+0

Got you. Aber gibt es eine Möglichkeit, einen Gurkenschritt mit einem Tabellenparameter (wie dem in meinem Post) um solch eine Fabrik zu wickeln? Vielleicht sollte ich nur einen pragmatischen Ansatz nehmen und im Schritt ("Gegeben habe ich zwei Elemente, foo und bar, die zu einer Gruppe namens foo gehören") ausführlich und spezifisch sein, anstatt sich mit Tabellen zu beschäftigen, aber das klingt etwas Wie ein Anti-Muster für mich? –

0

Sie können die definierten factory Cucumber Schritte aus:
https://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/step_definitions.rb

Sie können Setup Ihre Artikel und Ihre Gruppe (n) in nur einer Gurke Schritt:

Wenn Sie dies so machen, verwendet die Erstellung der Gruppe "Bar" die Funktion "find_or_create_by", so dass der erste Aufruf die Gruppe erstellt, die nächste 2 Anrufe findet die bereits erstellte Gruppe.

Auf diese Weise haben alle 3 Elemente die gleiche Gruppe "Bar", und Sie können so viele gruppierte Elemente erstellen, wie Sie benötigen.

+0

Die Schritte von FactoryGirl Cucumber werden von ThoughtBot zugunsten besserer Szenarien veraltet. Sehen Sie ihren Blog-Beitrag: http://robots.thoughtbot.com/post/25650434584/writing-better-cucumber-scenarios-or-why-were – MikeH