2016-04-08 34 views
2

Özel geçerliliklerim için bir çift sınama gerçekleştirmeye çalışıyorum ve this example numaralı telefona rastladım.Özel geçerlilik denetleyicisi için test oluşturma

Benim doğrulayıcı bu

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 

benziyor Ve ben bir kılavuz olarak yukarıda bahsedilen örneği kullanarak bu kadarıyla aldık.

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 

Bu aşamada aldığım hata iletisini alıyorum şu şekildedir.

rake aborted! TypeError: superclass mismatch for class FutureValidator

Buradan nasıl devam edeceğimi bilmiyorum.

cevap

3

Modeliniz ve TestCase'iniz aynı sınıf adına sahip gibi görünüyor. Testinizin adını değiştirmek sorunu çözmelidir.

+0

İyi yakalama. Bu cevabı yayınlamadan 5 saniye önce fark ettim. – CheeseFry

+0

Bu konuda nasıl çalışılabilir bir test nasıl alınacağına dair herhangi bir öneriniz var mı? 'NoMethodError: undefined method' value = 'nil için: NilClass' testteki mevcut hata mesajım. – CheeseFry

+0

, 'obj' yönteminin çağrılmadığı gibi görünüyor. Test Örneğinizde 'obj' yerine' obj' kullanın ya da testin 'def setup' yönteminde bildirin. –

İlgili konular