Тестирование RSpec без проверки has_many через отношения

У меня есть отношения «многие ко многим» между документами.

Скажем, у меня есть document1 и document2. У меня есть таблица многие ко многим, где есть родители и дети.

document.rb

  has_many :child_relationships, :class_name => "DocumentRelationship", :foreign_key => "child_id", :dependent => :destroy
  has_many :parents, :through => :child_relationships, :source => :parent

  has_many :parent_relationships, :class_name => "DocumentRelationship", :foreign_key => "parent_id", :dependent => :destroy
  has_many :children, :through => :parent_relationships, :source => :child

document_relationship.rb

  belongs_to :parent, :class_name => "Document", :foreign_key => "parent_id"
  belongs_to :child, :class_name => "Document", :foreign_key => "child_id"

  validates_uniqueness_of :child_id, :scope => [:parent_id]

  validates_presence_of :parent_id
  validates_presence_of :child_id
  validate :obeys_chronology

  def obeys_chronology
    errors.add(:child_id, "must be created after its parent") if child_id.to_i < parent_id.to_i
    errors.add(:child_id, "cannot be its own parent") if child_id.to_i == parent_id.to_i
  end

Если я скажу document2.children << document1, это соответственно не пройдет проверку, но я не знаю, как написать тест для этого.

Есть лучший способ это сделать?


person Cyrus    schedule 05.01.2012    source источник


Ответы (1)


Добавьте его в коллекцию

document2.children << document1
document2.children.contain?(document1).should == false

Затем убедитесь, что его там нет.

person thenengah    schedule 05.01.2012
comment
Я только что попробовал это. Сбой/ошибка: d2.children ‹‹ d1 ActiveRecord::RecordInvalid: Ошибка проверки: дочерний элемент должен быть создан после его родителя # ./spec/models/document_spec.rb:65:in `block (3 уровня) в ‹top (обязательно )›' - person Cyrus; 05.01.2012