2017-08-30 73 views
1

我的模型有關於其相關模型之一的驗證。由於此驗證,我的rspec測試模型失敗。由於關聯模型的驗證,對activerecord模型的Rspec shoulda匹配器測試失敗

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 nilnew_offer_range

我還爲我的模型工廠使用了FactoryGirl,該工廠已爲new_offer_range定義了一個有效且具有相應參考的工廠。 我可以不知何故告訴應該匹配器使用該工廠,以免得到這個驗證錯誤?

回答

1

設置

subject { create :new_offer_range } 

it -blocks應該解決的問題。它將設置測試的主題,而不是默認對象,但是您希望擁有一個。

+0

謝謝,只是在閱讀本答案之前嘗試過,並且即將發佈。 –