2012-09-02 8 views
17

So che si può facilmente verificare un appartiene al rapporto con Shoulda:Shoulda belongs_to con class_name e foreign_key

describe Dog dog 
    it { should belong_to(:owner) } 
end 

E 'possibile testare un rapporto belongs_to più complicata utilizzando Shoulda? Qualcosa di simile a questo:

class Dog < ActiveRecord::Base 
    belongs_to :owner, :class_name => "Person", :foreign_key => "person_id" 
end 

risposta

2

Così il README should-matchers è abbastanza luce sui dettagli, solo che hanno alcuni esempi. Ho trovato che ci sono molte più informazioni nell'RDoc delle classi, nel caso di belongs_to dai un'occhiata a association_matcher.rb. Il primo metodo è per belongs_to con la rdoc

# Ensure that the belongs_to relationship exists. 
    # 
    # Options: 
    # * <tt>:class_name</tt> - tests that the association makes use of the class_name option. 
    # * <tt>:validate</tt> - tests that the association makes use of the validate 
    # option. 
    # 
    # Example: 
    # it { should belong_to(:parent) } 
    # 
    def belong_to(name) 

Così belongs_to solo test di supporto per :class_name e :validate.

3

so di essere un po 'in ritardo alla festa, quindi la mia soluzione potrebbe richiedere una versione aggiornata di shoulda.

Al momento della scrittura sono a v 2.4.0.

Non ho bisogno di class_name o with_foreign_key nella mia specifica.

Assicurarsi di aver specificato class_name e foreign_key nel modello.

# model.rb: 
belongs_to :owner, inverse_of: :properties, class_name: "User", foreign_key: :owner_id 

# spec.rb: 
it { should belong_to(:owner) } 

uscita risultante:

should belong to owner