2016-07-25 18 views
7

Was ist der Zweck von transient do in FactoryGirl Fabriken?Was ist der Zweck eines transienten Do-Blocks in FactoryGirl-Fabriken?

Ich habe viele Fabriken gesehen, die mit etwas wie unten beginnen.

factory :car do 
    owner nil 
    other_attribute nil 
end 
... 

Ich habe einige Informationen in diesem Blog gefunden: http://blog.thefrontiergroup.com.au/2014/12/using-factorygirl-easily-create-complex-data-sets-rails/

Aber ich immer noch nicht verstehen, wie und warum dies zu tun. Meine Erfahrung mit FactoryGirl ist minimal.

Kann jemand mit etwas Erfahrung mit FactoryGirl einige Einblicke teilen?

+2

Ihr Beispiel verwendet keine Transienten. Haben Sie eine Fabrik, die "transient" verwendet, die Sie verstehen möchten? –

Antwort

20

transient Attribute können Sie Daten übergeben, die ist kein Attribut auf dem Modell.

Sagen Sie bitte ein Modell namens car mit den folgenden Attributen:

  • Name
  • purchase_price
  • Modell

Sie möchten den Namen des Autos nutzen, wenn Sie das schaffen Automodell in der Fabrik. Was wir tun können, ist:

factory :car do 
    transient do 
    # capitalize is not an attribute of the car 
    capitalize false 
    end 

    name   { "Jacky" } 
    purchase_price { 1000 } 
    model   { "Honda" } 

    after(:create) do |car, evaluator| 
    car.name.upcase! if evaluator.capitalize 
    end 
end 

Daher, wenn Sie die Autofabrik erstellen und Sie den Namen groß schreiben möchten. Sie können tun

car = FactoryGirl.create(:car, capitalize: true) 
car.name 
# => "JACKY" 

Ich hoffe, es hilft.