2012-09-02 13 views
17

Sé que usted puede probar fácilmente una relación pertenece a usar Shoulda:belongs_to Shoulda con class_name y foreign_key

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

¿Es posible probar una relación belongs_to más complicado usando Shoulda? Algo como esto:

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

Respuesta

2

Así que la should-matchers README es bastante luz sobre los detalles, sólo tener algunos ejemplos. Encontré que hay mucha más información en el RDOC de las clases, en el caso de belongs_to, eche un vistazo a association_matcher.rb. El primer método es para belongs_to con el 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) 

Así belongs_to únicas pruebas de apoyo para :class_name y :validate.

3

Sé que soy un poco tarde a la fiesta, entonces mi solución podría requerir una versión actualizada de shoulda.

En el momento de la escritura estoy en v 2.4.0.

No necesité class_name o with_foreign_key en mi especificación.

Asegúrese de haber especificado class_name y foreign_key en su modelo.

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

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

salida resultante:

should belong to owner 
Cuestiones relacionadas