2012-11-01 2 views
0

모델 order.rb레일 단위 테스트 모델 검증 : 포함이 실패

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} 

모두 괜찮습니다. 왜 그것이 하나의 plase에서 작동하지만, 테스트에서 이해가 안 돼요? ...

픽처는 모두 괜찮습니다.

도와주세요.

+0

재미있는 점은 터미널에서 'rake test'를 실행하는 것입니다.> 오류가 없습니다. 'rake test : validation'오류가 발생했습니다. 왜 ?)))) – Gatman

답변

1

대부분의 경우 지불 유형을 상수에 저장하는 것이 문제 일 수 있습니다.

테스트를 수행하려면 레일에 Order 모델이로드되기 전에 PaymentTypes을 데이터베이스에서 사용할 수 있어야하며, 그렇지 않을 수도 있습니다.

이 문제를 해결할 수있는 방법 중 하나는 (메모) 클래스 방법을 사용하여 결제 유형을 저장하는 것입니다. 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