2016-06-22 8 views
0

Ist es möglich, die Kurzschrift-Syntax für factory_girl Traits zu verwenden?Kurzschrift-Block-Syntax für Factory-Eigenschaften

Betrachten Sie diese Fabrik:

FactoryGirl.define do 
    factory :foo do 
    name "name" 

    # not using the block shorthand {} syntax, instead using do...end block syntax 
    trait :my_name do 
     name "Neil" 
    end 

    end 
end 

Und dieses Werk mit arbeitet:

create(:foo, traits: [:my_name]) 

aber ich möchte die Kurzsatzsyntax für meine Züge benutzen wie so:

FactoryGirl.define do 
    factory :foo do 
    name "name" 

    # using shorthand block syntax but does not work 
    trait :my_name {name "Neil"} 

    end 
end 

Und jetzt mit dieser Fabrik Fehler aus. Hier ist, was passiert:

create(:foo, traits: [:my_name]) 

Syntaxfehler, unerwartete ‚{‘, erwartet keyword_end (Syntax)

Dies scheint seltsam, weil ich dachte, dass, wo immer Sie verwenden do ... end Sie für die Kurz entscheiden können {} Block-Syntax.

Frage: Gibt es etwas falsch mit meiner Kurzschrift-Block-Syntax für die Factory-Methode trait und das ist, warum es ausgibt? Oder: Ist es nicht erlaubt, die Kurzblock-Syntax mit factory_girl traits zu verwenden? Gibt es eine Möglichkeit, die Kurzschrift-Syntax für factory_girl Traits zu verwenden?

Docs on the factory_girl trait attribute

Antwort

2

Sie sehen, trait ist eigentlich eine Methode, die einen Namen des Merkmals und einem Block nimmt. Dies sind 2 Parameter einer Methode. Wenn Sie do ... end Syntax verwendeten, könnte Ruby-Interpreter vermuten, dass Sie ein zweites (Block-) Argument geben. Aber im zweiten Fall ist es nicht klar, weil Sie zum Beispiel eine Hash passieren können.

Das ist, warum Sie es brauchen, um klar, dass man in der zweiten param sind vorbei und es ist ein Block wie folgt aus:

trait(:my_name) { name "Neil" } 
+0

Oh wow! Super danke! Sieht so aus, als müsste ich mehr über Blöcke lernen. Bin dankbar! – Neil

Verwandte Themen