2016-06-22 3 views
0

factory_girl形質の短縮形ブロック構文を使用できますか?factory_girl形質の略式ブロック構文

この工場で考えてみましょう:

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 

をそして、このファクトリを使用して動作します。私はそうのように私の形質について簡略ブロック構文を使用したいと思いますしかし

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

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

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

    end 
end 

今、この工場のエラーを使用しています。ここでは何が起こるかです:私はあなたが速記を選ぶことができdo ... end使用どこでもと思ったので

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

構文エラー、予期しない「{」、keyword_end(にSyntaxErrorを)期待し

これは奇妙に思えます{}ブロック構文。

質問:factory_girl traitメソッドの私の短縮形ブロック構文に何か問題があり、それがエラーになっているのですか?または、factory_girl traitsの略式ブロック構文を使用することはできませんか? factory_girl特性のための略式ブロック構文を使用する方法はありますか?あなたが見

Docs on the factory_girl trait attribute

答えて

2

traitは実際に特性およびブロックの名前を取る方法です。これらはメソッドの2つのパラメータです。 do ... end構文を使用した場合、Rubyインタプリタは2番目の(ブロック)引数を与えていると推測できます。しかし、2番目の{ ... }の場合は、たとえばHashを渡している可能性があるため、明確ではありません。

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

すごいああ:あなたはそれを明確にあなたが第二のparamに渡していると、それはこのようなブロックであることを確認する必要がある理由です

!素晴らしいです、ありがとう!私はブロックについてもっと勉強する必要があるように見えます。感謝します! – Neil