为自定义验证器创建测试

时间:2016-04-08 19:30:23

标签: ruby-on-rails ruby validation unit-testing minitest

尝试为我的自定义验证实施一些测试,我遇到了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

在此阶段,我收到的错误消息如下:

  耙子流产了!   TypeError:类FutureValidator的超类不匹配

我不确定如何从这里开始。

1 个答案:

答案 0 :(得分:3)

看起来您的模型和TestCase具有相同的类名。更改测试名称应解决问题。