由于相关模型

时间:2017-08-30 13:53:18

标签: ruby-on-rails validation activerecord rspec

我的模型对其中一个相关模型进行了验证。由于这种验证,我的模型的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定义了一个有效且具有相应引用的工厂。 我可以告诉匹配者应该使用该工厂以免得到此验证错误吗?

1 个答案:

答案 0 :(得分:1)

设置

subject { create :new_offer_range }

it之前 - 块应解决问题。它将设置测试的主题,而不是默认对象,而是您想要的。