我有一个模型,其关系如下:
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