我有一个像这样的关系的模型:
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的“undefined method`cat_is_enabled”,我得到了一个错误。我该如何关闭默认值?有没有更好的方法来测试验证?
THX
答案 0 :(得分:1)
这是一个想法:
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
答案 1 :(得分:0)
我认为您根本不需要尝试保存记录来测试此验证,并且您通常应该避免在测试中更多地触摸数据库。
it "should have a header value" do
mi=Item.new(:header => "").should_not be_valid
end