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

时间:2012-01-08 22:48:33

标签: ruby-on-rails ruby-on-rails-3.1 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的“undefined method`cat_is_enabled”,我得到了一个错误。我该如何关闭默认值?有没有更好的方法来测试验证?

THX

2 个答案:

答案 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

信用:article from Intridea

答案 1 :(得分:0)

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

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