2017-08-30 6 views
1

私のモデルは、関連付けられているモデルのいずれかに関する検証を持っています。この検証の結果、モデルの私のrspecテストが失敗しました。検証を実行しようとしたとき、それはnew_offer_rangeためnew_offer is nilを言うのでアクティブレコードモデルのRspec shoulda matcherテストは、関連付けられたモデルの検証のために失敗します

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_rangeのファクトリを定義しているモデルファクトリでもFactoryGirlを使用していますが、これには対応する参照があります。 この検証エラーが発生しないように、マッハッシャーにそのファクトリを使用するように指示することはできますか?問題を解決する必要があります

subject { create :new_offer_range } 

it前-blocksを設定

答えて

1

。デフォルトのオブジェクトではなくテストしたいオブジェクトを設定します。

+0

ありがとう、ちょうどこの答えを読む前にそれを試み、それを投稿しようとしていた。 –

関連する問題