测试模型与工厂女孩的构建或匹配

时间:2013-03-23 18:06:33

标签: ruby-on-rails ruby-on-rails-3 rspec factory-bot rspec-rails

我为patient_allergies设有以下工厂

FactoryGirl.define do
  factory :patient_allergy do
    patient
    name 'Peanuts'
  end
end

以下factory_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

以上工作正常,但似乎没有增加太多价值。   我试图找出一种方法来使用构建和特征进行上述测试。   另外,有没有办法使用期望(患者).to_many(:patient_allergies)匹配器等。

如果我能理解用工厂女孩测试我的模型,那将非常有用。

1 个答案:

答案 0 :(得分:1)

以上工作正常,但似乎没有增加太多价值

同意。您的模型规范应该测试您编写的方法,而不是测试Rails的行为。

如果你想测试你的关联,你可以看看shoulda-matchers,它有Rails模型的标准测试。