2012-04-27 43 views
6

在FactoryGirl的最新版本中,一些句法方法(如Factory.create)被折舊以支持其他幾種語法,最顯着的是FactoryGirl.create和更簡單的create不明確何時使用特定的FactoryGirl語法

但是,經驗表明,考慮到上下文,某些語法並不總是合適的。

舉個例子:

FactoryGirl.define do 

    factory :article do 
    after_create {|a| a.comments << create(:comment) } 
    end 

    factory :comment do 
    end 

end 

其中物件的has_many評論和belongs_to的文章評論。在上述工廠中,a.comments << create(:comment)發佈了錯誤Comment(#nnn) expected, got FactoryGirl::Declaration::Static。將該行更改爲a.comments << FactoryGirl.create(:comment),錯誤消失。

當一種語法優先於任何其他形式時,並不清楚。

回答

5

從當前版本(3.2.0)開始,我學到了回調(如after_create)中不支持縮寫符號。這些信息是通過Google小組直接從FactoryGirl團隊獲得的。如果在未來的版本中添加,我會更新此問題。

+1

你是一個冷靜的救星花花公子。我只是要使用長語法。比幾小時的無知調試更好一些額外的按鍵。 – 2013-04-04 01:15:17

+0

我在一年前問過這個問題,從那以後一直使用這個長形。是的,我同意,方式少抓撓。 – IAmNaN 2013-04-05 01:53:31

1

按照該FactoryGirl documentation,如果你想省略FactoryGirl模塊前綴,而調用的方法,如創建和構建,你需要混合式FactoryGirl方法的RSpec /測試單元模塊是這樣的:

# rspec 
RSpec.configure do |config| 
    config.include FactoryGirl::Syntax::Methods 
end 
+0

感謝您的回覆Salil。是的,我已經這樣做了,只允許我在上述情況下使用'create'。 – IAmNaN 2012-04-28 20:23:18