2017-05-09 29 views
0

我有一個我想用FactoryGirl創建的鍵和值的散列。我通過了POST類似的要求,但無法理解達到我想要的方式。以下是我的嘗試:使用FactoryGirl定義多個自定義記錄

statuses = { 
    "holding_status" => "Holding", 
    "scheduled_status" => "Scheduled", 
    "submitted_status" => "Submitted", 
    "cancelled_status" => "Cancelled", 
    "failed_status" => "Failed", 
    "none_status" => nil 
} 

statuses.each do |code, name| 
    FactoryGirl.define do 
    factory :submit_statuses do 
     code code 
     name name 
    end 
    end 
end 

但是,它給了我下面的錯誤(預計):

/var/lib/gems/2.2.0/gems/factory_girl-4.5.0/ LIB/factory_girl/decorator.rb:10: `method_missing的「:廠已註冊: submit_statuses(FactoryGirl :: DuplicateDefinitionError)

編輯(闖闖)

​​

回答

1

您如何期待能夠稱此工廠?我有點不清楚你希望在這裏獲得什麼。

一種可能的方法,我建議是定義每個狀態類型爲factory trait

statuses = { 
    "holding_status" => "Holding", 
    "scheduled_status" => "Scheduled", 
    "submitted_status" => "Submitted", 
    "cancelled_status" => "Cancelled", 
    "failed_status" => "Failed", 
    "none_status" => nil 
} 

FactoryGirl.define do 
    factory :submit_status do 
    statuses.each do |code, name| 
     trait code.to_sym do 
     code code 
     name name 
     end 
    end 
    end 
end 

# Usage: 
FactoryGirl.create(:submit_status, :holding_status) 

# Or: 
statuses.map { |status| FactoryGirl.create(:submit_status, status) } 
+0

沒錯,OP實際上更好的詮釋。 –

+0

只是爲了理解,你能看到我的**編輯**,並告訴我什麼是'特徵'優於我的代碼 – Abhi

+1

你的新代碼*有效*,但我會認爲它質量差。你正在污染工廠的全局名稱空間,這似乎是好的,因爲每個狀態代碼都被稱爲' _status' ...但是爲什麼* IS *所有名稱都是這樣命名的?你的狀態應該是'hold','scheduled','submitted'等。通過使用traits,你可以在一個「標題」下將每個工廠在邏輯上分組。 –