2012-01-05 3 views
1

У меня есть много разных отношений между документами.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 уместнее не проходит проверку, но я не знаю, как написать тест для этого ,

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

ответ

0

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

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

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

+0

Я просто попробовал это. Ошибка/ошибка: d2.children << d1 ActiveRecord :: RecordInvalid: Не удалось выполнить проверку. Ребенок должен быть создан после его родителя. # ./spec/models/document_spec.rb:65:in 'block (3 levels) in ' – Cyrus

Смежные вопросы