2013-09-24 20 views
0

假設我有一個event_type模型,其中包含幾個事件類型,如「live」,「used」,「offline」。rails:如何爲我的所有狀態擁有FactoryGirl

這些類型用於我的其他模型稱爲事件。現在,在測試時,我需要在每次運行時都填充所有類型。更具體地講,這是我的事件廠:

factory :event do |e| 
    e.event_type {|v| v.association(:event_type)} 
    e.latitude 40.767929000000 
    e.longitude -73.985742000000 
end 

我想這對事件工廠:

after(:create) {|event| 
    FactoryGirl.create(:event_type, {:name => "live"}) 
    FactoryGirl.create(:event_type, {:name => "used"}) 
    FactoryGirl.create(:event_type, {:name => "offline"}) 
} 

這種方法的問題是,如果我創建一個以上的事件對象的所有事件我爲每個事件再次創建類型。

什麼是更好的方法?

謝謝,

回答

1

您必須在運行測試的_spec中執行此操作。 (或測試)

在RSpec中,您可以在規範頂部的前一個塊中執行此操作。

require 'spec_helper' 

describe Event do 

    before do 
    FactoryGirl.create(:event_type, {:name => "live"}) 
    FactoryGirl.create(:event_type, {:name => "used"}) 
    FactoryGirl.create(:event_type, {:name => "offline"}) 
    end 

    it "tests something" do 
    ... 
    end 
end 

還你可能想要做什麼特質是爲...所以在你的工廠生產的

factory :event do |e| 

    e.latitude 40.767929000000 
    e.longitude -73.985742000000 

    trait :live 
    e.event_type = "live" 
    end 

    trait :used 
    e.event_type = "used" 
    end 

    trait :offline 
    e.event_type = "offline" 
    end 

    # defining these is not necessary but may save you some time 
    factory :event_live, traits: [:live] 
    factory :event_used, traits: [:used] 
    factory :event_offline, traits: [:offline] 
end 

這將允許您創建基於它們的方式工廠:

FactoryGirl.create :event, :live 

或者您可以撥打以上

FactoryGirl.create :event_live 
所示的「不必要的工廠」

但是,如果EVENT_TYPE是一個協會,那麼你可能需要在一個單獨的工廠,你可以利用這樣被定義的特點:

trait :live do 
    e.association :event_type, factory: :event_type 
end 

希望這有助於!

您可能還需要充分利用Database Cleaner寶石,以清除每次運行之間的項目,這樣你就不會遇到獨特的驗證錯誤。

+0

用戶回答它的幫助,謝謝!但是有沒有辦法在全球範圍內創建這些事件,而不是在每個規範之前? – bymannan

+0

一般來說(至少IMO)你想在每次運行之前用一個空的數據庫開始,所以我會建議每次運行創建它們。但是,您可以將它們放在「描述事件」中,然後在其中嵌套其他描述塊。這些事件將出現在每個嵌套的描述塊中。 :) – engineerDave

0

一個解決方案將直接填充到測試數據庫的值。如果您使用的是交易裝置(spec_helper中的config.use_transactional_fixtures = true),則不必擔心會意外刪除它。如果將它放入夾具中,如果它丟失,可以輕鬆地重新導入。

+0

這聽起來更像是一個比答案的建議,請在該問題的意見添加這些,一旦你有足夠的信息,爲他們能夠實現 – pal4life

相關問題