ruby on rails - example - Rieles: Prueba de ámbitos nombrados con RSpec
rails selenium (3)
Soy nuevo en la prueba de aplicaciones web Rails y RSpec. Trabajo con código heredado y necesito agregar pruebas. Entonces, ¿cuál es la mejor manera de probar los buscadores y los ámbitos nombrados con RSpec?
Encuentro en Google algunos enfoques pero no son ideales. Por ejemplo:
http://paulsturgess.co.uk/articles/show/93-using-rspec-to-test-a-named_scope-in-ruby-on-rails
it "excludes users that are not active" do
@user = Factory(:user, :active => false)
User.active.should_not include(@user)
end
o
http://h1labs.com/notebook/2008/8/21/testing-named-scope-with-rspec
it "should have a published named scope that returns ..." do
Post.published.proxy_options.should == {:conditions => {:published => true}}
end
Encuentro el mejor enfoque (IMHO) en "Prescripciones de prueba de riel":
should_match_find_method :active_only { :active == true }
donde should_match_find_method
método auxiliar personalizado
Desde https://coderwall.com/p/hc8ofa/testing-rails-model-default_scope-with-rspec
- sin consultas de base de datos
- No es necesario representar la consulta en una estructura.
Ejemplo:
class Trip < ActiveRecord::Base
default_scope { order(departure: :asc) }
...
end
RSpec.describe Trip, type: :model do
it "applies a default scope to collections by departure ascending" do
expect(Trip.all.to_sql).to eq Trip.all.order(departure: :asc).to_sql
end
end
El creador de RSpec ha publicado recientemente en su blog que cree que las validaciones son un comportamiento, que las asociaciones son una estructura . En otras palabras, él encuentra que las asociaciones (y los ámbitos) no deberían ser probados directamente directamente. Las pruebas para estos seguirán de la conducta que desea.
En otras palabras, la sabiduría actual es que no hay necesidad de probar cada alcance directamente, ya que cubrirá estas asociaciones al probar el comportamiento de su aplicación.
El problema con el primer enfoque es que realmente consulta la base de datos. Es lento e innecesario. Si no te importa, puedes usar con seguridad el primer enfoque. El segundo enfoque es rápido y claro, así que lo recomendaría.