2012-03-07 9 views
2

(다른 것들 중에서) 일부 맞춤형 모델 검사기가 포함 된 레일 젬을 작성하려고합니다 ... 유효성 검사 옵션을 테스트하는 방법이 궁금합니다.레일 사용자 정의 유효성 검사기 : 테스트 옵션

예를 들어, allow_nil 옵션이 true이면 빈 필드가 유효한 값을 반환하는 rspec 테스트를 작성하고 그렇지 않은 경우에는 rspec 테스트를 작성하고 싶습니다. 코드는 정상적으로 작동하지만 우아한 방법으로 테스트 할 수는 없습니다. 코드 자체 :

Module ActiveModel 
    module Validations 
    module ThirstyVals 
     class ValidatePrime < EachValidator 
     # Validate prime numbers 
     def validate_each(record, attr_name, value) 
      return if options[:allow_nil] && value.strip.length == 0 

      # Other validation code here 
      # ... 
     end 
     end 
    end 
    end 
end 

나는 현재 괜찮 더미 프로젝트를 통해 테스트 해요,하지만 내가 생각할 수있는 유일한 방법은을 테스트 : allow_nil 옵션과 함께 새로운 속성을 작성하는 것입니다 : allow_nil 세트를 , 그리고 그것의 기능을 확인하십시오 ... 둘 다 과도하고 꽤 비열한 것 같습니다. 좀 더 우아한 방법이 있어야합니다.

validate_prime_spec.rb에

require path_to_validator_file 

describe ActiveModel::Validations::ThirstyVals::ValidatePrime do 
    context :validate_each do 
    it 'should do some stuff' do 
     subject.validate_each(record, attr_name, value).should #some expectation 
    end 
    end 
end 

그때 난 당신이 테스트를 할 필요가 있음을 제안 할 수 있습니다 : (후세 아래 다른 검사)

# ... 
before(:each) do 
    @entry = Entry.new 
end 

describe "it should accept valid prime numbers" do 
    ['7', '13', '29'].each do |n| 
    @entry.ticket = n 
    @entry.valid?('ticket').should be_true 
    end 
end 

describe "it should reject non-prime numbers" do 
    ['4', '16', '33'].each do |n| 
    @entry.ticket = n 
    @entry.valid?('ticket').should be_false 
    end 
end 

답변

관련 문제