2012-12-29 21 views
2

我擁有並屬於許多軟件包的模型類別。當用戶在類別中創建發佈時,它必須屬於其類別中的包。測試驗證,確保記錄與僅由父母擁有的記錄相關聯,規範

這裏有一個自定義驗證碼:

class PackageValidator < ActiveModel::Validator 
    def validate(record) 
    record.errors[:package_id] << 
     I18n.t('errors.messages.package.not_in_category') unless 
     record.category.packages.include? record.package 
    end 
end 

這偉大工程和所有,但它打破了我所有的RSpec的測試(與factory_girl),因爲factory_girl會爲每個類別和過賬我建立一個新的封裝/用它創造。

這裏是我的工廠:

factory :category do 
    sequence(:name) {|n| "Parts#{n}"} 
    sequence(:slug) {|n| "parts#{n}"} 
    packages {[FactoryGirl.create(:package)]} 
end 

factory :posting do 
    title 'Foo' 
    body 'Bar' 
    category 
    package 
end 

factory :package do 
    sequence(:name) {|n| "Basic#{n}" 
    price 0 
    photos 5 
end 

我怎樣才能讓這一切很好地一起玩?

+0

你可以在發佈工廠中做一些工作,比如將set包裝到'category.packages.first',可能在'after(:build)'鉤子中? –

+0

謝謝,這工作。我的驗證器仍然打破了應用匹配器,但是這是因爲它假定發佈是使用類別構建的。在PackageValidator#validate'方法的開始處添加'return if record.category.nil?'修正了這個問題。我已經有一個驗證,確保存在一個類別,所以應該工作正常。 –

+0

很酷,很高興幫助。 –

回答

0

您可以在after(:build)掛鉤中將程序包設置爲category.packages.first

相關問題