我的模型对其中一个相关模型进行了验证。由于这种验证,我的模型的rspec测试失败了。
describe NewOfferRange do
it { is_expected.to validate_presence_of(:new_offer) }
it { is_expected.to validate_presence_of(:from) }
it { is_expected.to validate_presence_of(:to) }
end
class NewOfferRange < ApplicationRecord
validates :new_offer, :from, :to, presence: true
validate :unique_for_date_ranges
delegate :hotel, to: :new_offer
def unique_for_date_ranges
if hotel.new_offers.joins(:new_offer_ranges)
.where('new_offer_ranges.from < ? AND new_offer_ranges.to > ?', to, from)
.where.not(new_offer_ranges: { id: id })
.count
.positive?
errors.add(:base, 'Ya hay otra oferta para esas fechas.')
end
end
这些测试失败,因为在尝试运行验证时,它为new_offer is nil
显示new_offer_range
。
我还将FactoryGirl用于我的模型工厂,该工厂为new_offer_range
定义了一个有效且具有相应引用的工厂。
我可以告诉匹配者应该使用该工厂以免得到此验证错误吗?
答案 0 :(得分:1)
设置
subject { create :new_offer_range }
在it
之前 - 块应解决问题。它将设置测试的主题,而不是默认对象,而是您想要的。