2012-11-30 31 views
3

如果我有一個完整的工廠的文件看起來像這樣:FactoryGirl:建立一個班的所有工廠或文件?

FactoryGirl.define do 
    factory :city do 
    name "My City" 
    state "MI" 
    latitude 50 
    longitude -80 
    association :country 
    end 
    factory :waukegan_city, class: City do 
    name "Waukegan" 
    state "IL" 
    latitude "42.36" 
    longitude "-87.81" 
    association :country 
    end 
    factory :amherst_oh, class: City do 
    name "Amherst" 
    state "OH" 
    latitude 41.36170 
    longitude -82.25380 
    association :country 
    end 
end 

我可以這樣做:

FactoryGirl.create(:city) 
FactoryGirl.create(:waukegan_city) 
FactoryGirl.create(:amherst_oh) 

但是,有沒有辦法一次創建所有的這些(即沒有指定個別工廠,但沒有在每個文件中創建所有工廠)?

+0

有一個find_definitions方法,該方法將在軌道被稱爲FactoryGirl.configuration.factories將被所有現有的工廠填充。我只是在尋找一種方法來運行它 –

回答

1

試試這個:

FactoryGirl.factories.each do |factory| 
    FactoryGirl.create(factory.name) 
end 
+0

是不是要在每個文件中創建所有工廠? –

1

要爲特定類創建所有的工廠一次,你可以使用build_class方法來識別那些具體的工廠。

每當我不熟悉Ruby對象可以做什麼時,我會查找它的方法並嘗試那些聽起來像滿足我需求的方法。在這種情況下,這裏是我想通了這一點:

  1. 我添加下面一行到我的規格之一:

    puts FactoryGirl.factories.first.methods 
    
  2. 我跑只是一個規範,在觀察到的輸出安慰。顯示最初的幾個方法是:

    name 
    definition 
    add_callback 
    declare_attribute 
    to_create 
    define_trait 
    constructor 
    defined_traits 
    inherit_traits 
    append_traits 
    build_class 
    run 
    human_names 
    associations 
    names 
    
  3. build_class好像它會給我的工廠屬於類,所以我通過更換我在步驟1中添加這一行給了它一個鏡頭:

    puts FactoryGirl.factories.map(&:build_class) 
    

    確實給了我所有工廠的類名稱。

  4. 下一步是要找到只屬於某個特定類的工廠,並遍歷它們創造每一個:

    ​​
相關問題