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
この段階では、次のようなエラーメッセージが表示されます。
ここから進める方法がわかりません。
良いキャッチ。私はちょうどあなたがこの答えを投稿する5秒前に気付いた。 – CheeseFry
これについて実用的なテストを受ける方法に関する提案はありますか? 'NoMethodError:未定義のメソッド' value = 'for nil:NilClass'はテストに関する私の現在のエラーメッセージです。 – CheeseFry
はあなたの 'obj'メソッドが呼び出されていないようです。あなたのテストケースで '@ obj'の代わりに' obj'を使うか、テストの 'def setup'メソッドで宣言してください。 –