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)匹配器什麼的。

如果我能理解用工廠女孩測試我的模型將是非常有用的。

回答

1

以上工作正常,但似乎犯規增加多少價值

同意。你的模型規範應該測試你編寫的方法,而不是測試Rails的行爲。

如果你想測試你的關聯,你可以檢查出shoulda-matchers,它有Rails模型的標準測試。

+0

是否有一種方法來測試我的上面的代碼沒有應該。在這種情況下,我不想使用外部寶石。 – Micheal 2013-03-24 00:24:39

+0

查看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