rails example databasecleaner ruby-on-rails ruby testing rspec

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.