2015-11-13 48 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