2016-01-10 54 views
2

我在<Rails-root>/spec/factories/models.rb定義的工廠:如何獲取爲特定模型類定義的所有factory_girl工廠?

FactoryGirl.define do 
    factory :model do 
    id 1 
    association :organization, factory: :aureso 
    name "Default Model" 

    factory :serie_1 do 
     id 2 
     name 'serie_1' 
    end 

    factory :serie_2 do 
     id 3 
     name 'serie_2' 
    end 

    factory :serie_3 do 
     id 4 
     name 'serie_3' 
    end 
    end 
end 

我想要得到Model類中定義的所有工廠。

我可以通過FactoryGirl.factories獲得所有類的工廠定義,是的,我可以使用map/reduce來實現上述目的。但我想知道是否有任何幫助方法來獲取模型類的所有定義。

+0

我真的不明白你在說什麼。工廠基本上是代表某個模型的對象。 ActiveModel模型是一個包含驗證和其他普通ruby事物的類,它是ActiveRecord :: Base類的一部分,從中繼承了模型。如果你在談論所有工廠之間的共同邏輯,你可以使用特質。 –

+0

你應該爲不同的模型創建不同的工廠。刪除'id'屬性,因爲id是由數據庫創建的。 –

+0

我正在使用夾具生成器(https://github.com/rdy/fixture_builder),我希望id可以自定義,這對於排序很有用。這不會導致我任何問題。我只是想知道在這種情況下是否有辦法讓所有工廠引用模型類:model(類名Model)。 – swapab

回答

2

the source可以看出,當前版本的factory_girl(4.5.0)中的FactoryGirl類沒有一個方便的方式來列出創建給定類的實例的工廠。

這不是一個非常令人興奮的答案,所以讓我們以不方便的方式來做! FactoryGirl.factories返回FactoryGirl::Registry,它再次沒有列出工廠的方便方法,但確實有@items散列,其中的鍵是工廠名稱,其值是FactoryGirl::Factory的實例。給定Factory構建實例的類由Factory#build_class返回。因此,我們可以列出建立一個給定的類的實例的工廠,

FactoryGirl. 
    factories. 
    instance_variable_get('@items'). 
    select { |name, factory| factory.build_class == SomeClass }. 
    keys 

由於依賴於內部,它肯定在未來的突破。

+0

Nice.Thanks for @ @ items'。你能找到我提到實例變量的源代碼(或文檔)嗎? – swapab

+0

我做到了!按照「FactoryGirl :: Registry」的鏈接。 –

+0

嘿!謝謝! – swapab

相關問題