Der Versuch, ein paar Tests für meine benutzerdefinierten Validierungen zu implementieren, und ich stieß auf this example.Test für benutzerdefinierten Validator erstellen
Mein Validator sieht aus wie diese
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
Und ich habe soweit dies mit dem oben genannten Beispiel als Richtlinie bekommen.
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
In diesem Stadium bekomme ich die Fehlermeldung, die ich bekomme ist wie folgt.
rake aborted! TypeError: superclass mismatch for class FutureValidator
Ich bin nicht sicher, wie Sie von hier fortfahren.
Guter Fang. Ich habe das erst 5 Sekunden vor der Veröffentlichung dieser Antwort bemerkt. – CheeseFry
Irgendwelche Vorschläge, um einen praktikablen Test auf diesem zu bekommen? 'NoMethodError: undefinierte Methode' value = 'für nil: NilClass' ist meine aktuelle Fehlermeldung beim Test. – CheeseFry
sieht aus wie Ihre 'obj' Methode nicht aufgerufen wird. Verwenden Sie entweder "obj" anstelle von "@ obj" in Ihrem Testfall oder deklarieren Sie es innerhalb einer "def setup" -Methode des Tests. –