tests test run rails matchers how ruby-on-rails ruby rspec has-many has-many-through

ruby on rails - test - Pruebas RSpec de Rails para has_many: a través de Relationship



rails test methods (3)

Soy nuevo en las pruebas y los rieles, pero estoy intentando que mi proceso TDD se desactive correctamente.

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

Por ejemplo, encuentro que 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 las especificaciones de mis categorías, hago la prueba inversa y compruebo @ category.posts

¿Qué más me estoy perdiendo? ¡¡Gracias!!


Recomendaría echarle un vistazo a una gema llamada Shoulda . Tiene muchas macros para probar cosas como relaciones y validaciones.

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

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

O si estás probando un has_many: a través, entonces usarías esto:

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

Encuentro la página Shoulda Rdoc también muy útil.


remarkable hará 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

En general, simplemente copie todas sus relaciones del modelo a la especificación y cambie "has" a "should_have", "belongs_to" a "should_belong_to", y así sucesivamente. Para responder a la acusación de que está probando rieles, también verifica la base de datos, asegurándose de que la asociación funcione.

Las macros también se incluyen para verificar las validaciones también:

should_validate_numericality_of :amount, :greater_than_or_equal_to => 0


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