2012-11-01 58 views
0

型號order.rbRails的單元測試模型驗證:包容失敗

class Order < ActiveRecord::Base 
    attr_accessible :address, :email, :name, :payment_type_id 
    belongs_to :payment_type 

    PAYMENT_TYPES = PaymentType.pluck(:id) 

    validates :name, :address, :email, :payment_type_id, :presence => true 
    validates :payment_type_id, :inclusion => {:in => PAYMENT_TYPES} 
end 

型號payment_type.rb

class PaymentType < ActiveRecord::Base 
    attr_accessible :name, :id 

    has_many :order 
end 

從瀏覽器中,確認工作正常,如果錯了,它給出一個錯誤,否則前進。 但問題是當我從終端運行rake test:functionals。測試沒有通過驗證。如果我評論此行:

validates :payment_type_id, :inclusion => {:in => PAYMENT_TYPES} 

一切都好。我不明白爲什麼它在一個地方工作,但在測試不是? ...

賽程一切正常。

請幫忙。

+0

有些什麼是有趣的前一段時間我運行'耙測試'終端=>沒有錯誤。 'rake test:功能'錯誤來自驗證。爲什麼? ))) – Gatman

回答

1

最可能的問題是,您正在將您的付款類型存儲在常量中。

爲了讓您的測試能夠正常工作,PaymentTypes必須在數據庫中可用,然後再裝載您的Order模型,但情況可能並非如此。

解決此問題的一種方法是使用(memoized)類方法來存儲您的付款類型。只要你在PaymentTypes都在數據庫中後訪問這個類的方法,你應該沒問題。

class Order < ActiveRecord::Base 
    validates :payment_type_id, :inclusion => { :in => self.payment_types } 

    def self.payment_types 
    @@payment_types ||= PaymentType.pluck(:id) 
    end 
end