2016-06-22 27 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 

現在使用這個工廠出錯了。這是發生了什麼:

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

語法錯誤,意外「{」,期待keyword_end(SyntaxError錯誤)

這似乎很奇怪,因爲我認爲,無論你使用do ... end你可以選擇速記{}塊語法。

問題:對於factory_girl trait方法,我的速記塊語法有什麼問題嗎?這就是爲什麼它出錯了?或者:你是不是允許在factory_girl traits中使用速記塊語法?是否有一種方法可以使factory_girl traits工作的速記塊語法成爲可能?

Docs on the factory_girl trait attribute

回答

2

你看,trait實際上是需要的性狀和塊的名稱的方法。這是一個方法的2個參數。當你使用do ... end語法時,Ruby解釋器會猜測你正在給出第二個(塊)參數。但是,在第二個{ ... }的情況下,目前尚不清楚,因爲您可能會通過Hash舉例。

這就是爲什麼你需要說清楚,你是在通過第二PARAM,它是這樣一個塊:

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

哇哦!太好了,謝謝!看起來我需要更多地研究塊。欣賞它! – Neil