Создать тест для пользовательского валидатора


Пытаясь реализовать пару тестов для моих пользовательских проверок, я наткнулся на Этот пример.

Мой валидатор выглядит так

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 2

1 ответ:

Похоже, что ваша модель и TestCase имеют одно и то же имя класса. Изменение имени теста должно устранить проблему.