rspec-测试验证,并希望关闭回调



我有一个模型,其关系如下:

class Category < ActiveRecord::Base
 has_many :items
end
class Item < ActiveRecord::Base
  belongs_to :category
  before_save :default_values
  validates_presence_of :header
  def default_values
    if self.category.cat_is_enabled==true
      self.is_enabled=true
    end
  end
end

我只想用检查validates_presence_of

需要"spec_helper"

describe Item do
  pending "add some examples to (or delete) #{__FILE__}"
  it "should have a header value" do
    mi=Item.create(:header => "").should_not be_valid
  end
end

但我在"nil:NilClass的未定义方法`cat_is_enabled'"中遇到了一个错误。如何关闭默认值?有没有更好的方法来测试验证?

thx

这里有一个想法:

代码

class ActiveRecord::Base
  def self.without_callback(callback, &block)
    method = self.send(:instance_method, callback)
    self.send(:remove_method, callback)
    self.send(:define_method, callback) {true}
    yield
    self.send(:remove_method, callback)
    self.send(:define_method, callback, method)
  end
end 

用法

Item.without_callback(:before_save) do
    mi = Item.create(:header => "").should_not be_valid
end

来源:Intridea的文章。

我认为您根本不需要尝试保存记录来测试此验证,而且通常应该避免在测试中接触数据库。

  it "should have a header value" do
    mi=Item.new(:header => "").should_not be_valid
  end

最新更新