2012-03-07 10 views
2

私はいくつかのカスタムモデルバリデータを含むレール宝石を書きたいと思っています...そして、私はバリデーションオプションをテストする方法が不思議です。Railsカスタムバリデータ:テストオプション

たとえば、allow_nilオプションがtrueの場合は空白フィールドが有効を返す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セットを、そしてその機能性を確認してください...どちらも過度であり、かなりエレガントではないようです。より優雅なやり方が必要です。 (後世のために、以下の他の検査)

# ... 
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 

答えて

0

あなたがそうのように孤立してバリデータをテストすると考えられています

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 

では、私はあなたがテストする必要がないことを示唆しているかもしれRailsで既にテストされているため、Rails検証のallow_nil機能はありますか? (activemodel/test/cases/validations/inclusion_validation_test.rb line 44参照)

関連する問題