2015-11-13 50 views
0

我想使用子類工廠重寫父類。例如,我想更改子類的子域,以便從父類中覆蓋子域。FactoryGirl重寫父類屬性子類

campaign.rb文件

FactoryGirl.define do 
    factory :campaign do 
    subdomain 'thrifty' 
    end 
end 

photo_upload_campaign.rb文件

FactoryGirl.define do 
    factory :photo_upload_campaign, parent: :campaign do 
    subdomain 'weekender' 
    end 
end 

步驟定義文件

Given(/^there's a subdomain for a photo upload campaign campaign$/) do 
    @campaign = create(:campaign) 
    @photo_upload = create(:photo_upload_campaign) 
    if [email protected]? 
    fail(ArgumentError.new('Where is the subdomain?')) 
    end 
end 

When(/^I visit the photo upload campaign microsite subdomain url$/) do 
    visit_with_subdomain microsite_home_path, subdomain: @photo_upload.subdomain 
end 
+0

我真的不明白你要做什麼 - 通過爲photo_upload_compaign工廠指定父::廣告系列,你認爲這是一個活動,默認情況下子站點設置爲'weekender',而不是'節儉「 - 然後在你的測試中你創建了一個 - 所以你有2個Campaign對象,1個子域名'節儉',一個子域'weekender' - 這是什麼問題? –

+0

我可以做'@campaign.subdomain ='weekender''。 '@photo_upload_subdomain = @ campaign.subdomain'。但是這會挫敗使用繼承的目的? – khoamle

+0

您認爲繼承了什麼? '@ photoupload'不是從'@ campaign'繼承的對象 - 它們是2個完全獨立的對象。工廠定義中的父級::廣告系列只會讓photo_upload_campaign工廠使用廣告系列工廠的設置,除非它們在photo_upload_campaign工廠中被覆蓋 - 每次創建調用仍然會創建完全獨立的對象 –

回答

0

我可以創建一個工廠競猜活動,並得到所有的屬性來自活動

FactoryGirl.define do 
    factory :quiz_campaign do 
    subdomain 'weekender' 
    end 
end