rspec - проверяет валидации и хочет отключить обратные вызовы - PullRequest
1 голос
/ 09 января 2012

У меня есть модель с такими отношениями:

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 с:

require '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

но я получаю сообщение об ошибке для "неопределенного метода` cat_is_enabled 'для nil: NilClass ".Как бы я отключить значения по умолчанию?Есть ли лучший способ проверить проверки?

thx

Ответы [ 2 ]

1 голос
/ 09 января 2012

Вот идея:

Код

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 .

0 голосов
/ 09 января 2012

Я думаю, вам просто не нужно пытаться сохранить запись, чтобы протестировать эту проверку, и вам, как правило, следует избегать касаться базы данных больше, чем в тестах, в любом случае.

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