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