2016-04-08 58 views
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 

在這個階段,我收到我收到的錯誤消息如下。

rake aborted! TypeError: superclass mismatch for class FutureValidator

我不知道如何從這裏開始。

回答

3

看起來像你的模型和TestCase有相同的類名。更改測試的名稱可以解決問題。

+0

好的。我只是注意到你發佈這個答案前5秒。 – CheeseFry

+0

關於如何在這個項目上進行可行的測試的任何建議? 'NoMethodError:未定義的方法'value ='爲零:NilClass'是我當前的測試錯誤信息。 – CheeseFry

+0

看起來像你的'obj'方法沒有被調用。在測試用例中使用'obj'而不是'@ obj',或者在測試的'def setup'方法中聲明它。 –