2010-10-19 14 views
19

Soy nuevo en las pruebas y los rieles, pero estoy tratando de obtener mi proceso TDD correctamente.Rieles Pruebas de RSpec para un has_many: a través de la relación

Me preguntaba si utiliza algún tipo de paradigma para probar has_many: a través de las relaciones? (o simplemente has_muchas en general, supongo).

Por ejemplo, en las especificaciones de mi modelo, definitivamente estoy escribiendo pruebas simples para verificar los dos extremos de una relación para los métodos relacionados.

es decir:

require 'spec_helper' 

describe Post do 

    before(:each) do 
    @attr = { :subject => "f00 Post Subject", :content => "8ar Post Body Content" } 
    end 

    describe "validations" do 
    ...  
    end 

    describe "categorized posts" do 

    before(:each) do 
     @post = Post.create!(@attr) 
    end 

    it "should have a categories method" do 
     @post.should respond_to(:categories) 
    end 

    end 

end 

Luego, en mis categorías Spec hago la prueba inversa y comprobar si @ category.posts

¿Qué más me falta? ¡¡Gracias!!

Respuesta

47

Yo recomendaría retirar una gema llamada Shoulda. Tiene muchas macros para probar cosas como relaciones y validaciones.

Si lo que quieres es probar que existe la relación has_many, entonces se podría hacer lo siguiente:

describe Post do 
    it { should have_many(:categories) } 
end 

O si se está probando un has_many: a través, entonces usted tendría que utilizar esto:

describe Post do 
    it { should have_many(:categories).through(:other_model) } 
end 

Encuentro muy útil la página Shoulda Rdoc.

+0

¿existen mayoría de las acciones personalmente al probar? Estoy buscando las cosas básicas que debo hacer inmediatamente cuando empiezo. Cosas como ... probar mis asociaciones parece razonable, pero ¿debería probar cada método a través de la asociación? ¿o cómo sabe uno cuándo parar? lol –

+0

Realmente me gusta usar estas pruebas rápidas de una sola línea porque son increíblemente fáciles de configurar. Siempre empiezo con esto y agrego toda relación y validación, incluidas todas las asociaciones a través de. No requiere mucho trabajo y no agrega mucha sobrecarga a sus pruebas. Luego, cuando agregue funcionalidad, agregaré más pruebas de unidad. Si escribe las pruebas para sus modelos mientras escribe el código, realmente lo obliga a escribir un código simple y modular. –

+0

cómo escribir has_many mediante asociación con expect syntex? – indb

1

remarkable harán esto muy bien:

describe Pricing do 

    should_have_many :accounts, :through => :account_pricings 
    should_have_many :account_pricings 
    should_have_many :job_profiles, :through => :job_profile_pricings 
    should_have_many :job_profile_pricings 

end 

Generalmente, sólo tienes que copiar todas sus relaciones a partir del modelo de la especificación y el cambio "tiene" a "should_have", "belongs_to" a "should_belong_to", y así. Para responder al cargo de que está probando los rieles, también verifica la base de datos, asegurándose de que la asociación funcione.

macros también se incluyen para comprobar validaciones así:

should_validate_numericality_of :amount, :greater_than_or_equal_to => 0 
+0

notable suena genial! ¿Lo estás usando con un env de rails3? –

+0

@Zaz, lo he usado con Rails 2.2.3 y 2.3.9 hasta el momento. Creo que también funciona con Rails 3, pero no lo he probado. –

2
describe "when Book.new is called" do 
    before(:each) do 
    @book = Book.new 
    end 

    #otm 
    it "should be ok with an associated publisher" do 
    @book.publisher = Publisher.new 
    @book.should have(:no).errors_on(:publisher) 
    end 

    it "should have an associated publisher" do 
    @book.should have_at_least(1).error_on(:publisher) 
    end 

    #mtm 
    it "should be ok with at least one associated author" do 
    @book.authors.build 
    @book.should have(:no).errors_on(:authors) 
    end 

    it "should have at least one associated author" do 
    @book.should have_at_least(1).error_on(:authors) 
    end 

end 
Cuestiones relacionadas