0
我有以下的工廠patient_allergies測試車型與建立或工廠女孩匹配
FactoryGirl.define do
factory :patient_allergy do
patient
name 'Peanuts'
end
end
下面的工廠patient_allergy_reactions
FactoryGirl.define do
factory :patient_allergy_reaction do
patient_allergy
name 'Fever'
severity 'High'
end
end
爲patient_allergy模型是這樣的:
class PatientAllergy < ActiveRecord::Base
belongs_to :patient
has_many :patient_allergy_reactions
end
patient_allergy_reaction的模型如下所示:
class PatientAllergyReaction < ActiveRecord::Base
belongs_to :patient_allergy
end
我的模型試驗看看這個:
it 'returns correct allergies with reactions' do
#create an allergy
allergy_name = 'Peanuts'
patient_allergy = create(:patient_allergy, name: allergy_name, patient: patient)
#create a allergy reaction
reaction_name = 'Fever'
reaction_severity = 'Low'
allergy_reaction = create(:patient_allergy_reaction, name: reaction_name, severity: reaction_severity, patient_allergy: patient_allergy)
expect(patient.patient_allergies.size).to eq(1)
expect(patient.patient_allergies[0]).to eq(patient_allergy)
expect(patient.patient_allergies[0].patient_allergy_reactions[0]).to eq(allergy_reaction)
end
以上工作正常,但似乎沒有增加多少價值。 我想弄清楚上面的測試使用構建和性狀的方法。 否則,有沒有辦法使用expect(patient).to have_many(:patient_allergies)匹配器什麼的。
如果我能理解用工廠女孩測試我的模型將是非常有用的。
是否有一種方法來測試我的上面的代碼沒有應該。在這種情況下,我不想使用外部寶石。 – Micheal 2013-03-24 00:24:39
查看should_matchers的代碼(https://github.com/thoughtbot/shoulda-matchers/blob/master/lib/shoulda/matchers/active_record/association_matcher.rb)。請注意,它不會創建和保存模型實例 - 它只會測試您是否正確設置了模型,而不是ActiveRecord代碼本身的工作原理。 Rails有它自己的測試。 – zetetic 2013-03-24 01:05:49