2016-06-01 26 views
0

Ich habe zwei einfache Fabriken: Eine für user und eine für blog. Wenn ein Blog erstellen, muss es eine user verbunden ist, so ist dies in der Blog-Fabrik wider:FactoryGirl: Attribute für das zugehörige Modell angeben

FactoryGirl.define do 
    factory :user do 
    end 
end 

FactoryGirl.define do 
    factory :blog do 
    user #specifying the required association 
    end 
end 

Jetzt kann ich wie so ein Blog in einer Spezifikation erstellen:

blog = create(:blog) 

, was ich bin nicht sicher, wie in der Spezifikation zu tun ist, wie einige benutzerdefinierte Attribute auf dem zugehörigen user Datensatz sofort, wenn der blog Datensatz zuerst erstellt wird.

Zum Beispiel: wenn die blog Datensatz erstellt (die auch einen zugehörigen user Datensatz erstellt), möchte ich auf diesem zugeordneten user Datensatz das first_name Attribut angeben. Etwas wie:

blog = create(:blog, associated_user: (first_name: 'foobar)) 

Diese Syntax oben funktioniert nicht, aber ich möchte so etwas tun. Ich habe mir die factory girl docs angesehen, und ich habe gegoogelt, bin aber nicht in der Lage, diese herauszufinden.

Frage: Wie lege ich einige benutzerdefinierte Attribute auf ein zugeordnetes Objekt beim Erstellen eines Objekts mit Factory-Mädchen?

+0

Haben Sie bei Verbänden in der docs factory geschaut? Ich denke, was Sie suchen, heißt eine vorübergehende http://www.rubydoc.info/gems/factory_girl/file/GETTING_STARTED.md#Associations –

+0

@JeffPrice ja, ich habe die Verbände Abschnitt. Es zeigt nicht, wie ich benutzerdefinierte Attribute in der tatsächlichen Spezifikation eingeben kann. Alles, was ich gesehen habe, war, dass es zeigt, wie Vererbung für eine Factory verwendet wird, so dass Sie assoziierte Merkmale auf diese Weise angeben können, aber das fühlt sich an wie Overkill, weil ich diese Attribute nur für eine kleine Spezifikation angeben möchte. – Neil

Antwort

1

Sie können einfach das entsprechende Aufrufargument mit dem benötigten Objekt festlegen.

user = create(:user, first_name: "Harald") 
blog = create(:blog, user: user) 
# or inline if preferred 
blog = create(:blog, user: create(:user, first_name: "Heinz")) 

Hinweis: Vergessen Sie nicht eher bauen zu verwenden, als zu erstellen, wo immer möglich, die Tests zur Beschleunigung :)

Verwandte Themen