2016-04-08 5 views
2

私のカスタムバリデーションのためにいくつかのテストを実装しようとすると、私はthis exampleに遭遇しました。カスタムバリデータのテストを作成

私のバリデータはこの

class FutureValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
    if value == nil 
     record.errors[attribute] << " can't be nil" 
    elsif value < Time.now 
     record.errors[attribute] << (options[:message] || "can't be in the past!") 
    end 
    end 
end 

のように見えると私は、ガイドラインとして、上記の例を使用して、この限り得ています。

require 'test_helper' 

class FutureValidatorable 
    include ActiveModel::Validations 
    # validates_with FutureValidator 
    attr_accessor :future 

    validates :future, future: true 
end 

class FutureValidator < ActiveSupport::TestCase 

    future_value = [nil] 
    def obj; @obj ||= FutureValidatorable.new; end 

    test 'future validator returns proper error code when nil is passed to it' do 
    future_value.each do |value| 
     @obj.value = value 
     assert_not obj.valid? 
    end 
    end 

この段階では、次のようなエラーメッセージが表示されます。

ここから進める方法がわかりません。

答えて

3

あなたのモデルに似ていますが、TestCaseのクラス名は同じです。テストの名前を変更すると問題が解決するはずです。

+0

良いキャッチ。私はちょうどあなたがこの答えを投稿する5秒前に気付いた。 – CheeseFry

+0

これについて実用的なテストを受ける方法に関する提案はありますか? 'NoMethodError:未定義のメソッド' value = 'for nil:NilClass'はテストに関する私の現在のエラーメッセージです。 – CheeseFry

+0

はあなたの 'obj'メソッドが呼び出されていないようです。あなたのテストケースで '@ obj'の代わりに' obj'を使うか、テストの 'def setup'メソッドで宣言してください。 –

関連する問題