tutorial tests test run rails matchers how ruby-on-rails ruby ruby-on-rails-3 rspec

ruby-on-rails - tests - ruby on rails test



¿Cómo ejecutar una sola prueba RSpec? (12)

En los carriles 5,

Utilicé esta manera para ejecutar un solo archivo de prueba (todas las pruebas en un archivo)

rails test -n /TopicsControllerTest/ -v

El nombre de la clase se puede usar para coincidir con el archivo deseado TopicsControllerTest

Mi clase class TopicsControllerTest < ActionDispatch::IntegrationTest

Salida:

Si lo desea, puede modificar la expresión regular para que coincida con el método de prueba único /TopicsControllerTest#test_Should_delete/

rails test -n /TopicsControllerTest#test_Should_delete/ -v

Tengo el siguiente archivo:

/spec/controllers/groups_controller_spec.rb

¿Qué comando en la terminal utilizo para ejecutar solo esa especificación y en qué directorio ejecuto el comando?

Mi archivo de gemas:

# Test ENVIRONMENT GEMS group :development, :test do gem "autotest" gem "rspec-rails", "~> 2.4" gem "cucumber-rails", ">=0.3.2" gem "webrat", ">=0.7.2" gem ''factory_girl_rails'' gem ''email_spec'' end

Archivo de especificaciones:

require ''spec_helper'' describe GroupsController do include Devise::TestHelpers describe "GET yourgroups" do it "should be successful and return 3 items" do Rails.logger.info ''HAIL MARRY'' get :yourgroups, :format => :json response.should be_success body = JSON.parse(response.body) body.should have(3).items # @user1 has 3 permissions to 3 groups end end end


Con rastrillo:

rake spec SPEC=path/to/spec.rb

(El crédito va a esta respuesta . Ve a votarle).

EDITAR (gracias a @cirosantilli): para ejecutar un escenario específico dentro de la especificación, debe proporcionar un patrón de expresión regular que coincida con la descripción.

rake spec SPEC=path/to/spec.rb / SPEC_OPTS="-e /"should be successful and return 3 items/""


Dado que estás en un proyecto de rails 3 con rspec 2, desde el directorio raíz de rails:

bundle exec rspec spec/controllers/groups_controller_spec.rb

Definitivamente debería funcionar. Me cansé de escribir eso, así que creé un alias para acortar ''bundle exec rspec'' a ''bersp''

''bundle exec'' es para que cargue el entorno de gema exacto especificado en su archivo de gema: http://gembundler.com/

Rspec2 cambió del comando ''spec'' al comando ''rspec''.


Hay muchas opciones:

rspec spec # All specs rspec spec/models # All specs in the models directory rspec spec/models/a_model_spec.rb # All specs in the some_model model spec rspec spec/models/a_model_spec.rb:nn # Run the spec that includes line ''nn'' rspec -e"text from a test" # Runs specs that match the text rspec spec --tag focus # Runs specs that have :focus => true rspec spec --tag focus:special # Run specs that have :focus => special rspec spec --tag focus ~skip # Run tests except those with :focus => true


La respuesta de @apneadiving es una buena manera de resolver esto. Sin embargo, ahora tenemos un nuevo método en Rspec 3.3. Simplemente podemos ejecutar rspec spec/unit/baseball_spec.rb[#context:#it] lugar de usar un número de línea. Tomado de here:

RSpec 3.3 introduce una nueva forma de identificar ejemplos [...]

Por ejemplo, este comando:

$ rspec spec/unit/baseball_spec.rb[1:2,1:4] … ejecutaría el segundo y el cuarto ejemplo o grupo definido en el primer grupo de nivel superior definido en spec / unit / baseball_spec.rb.

Entonces, en lugar de hacer rspec spec/unit/baseball_spec.rb:42 donde (la prueba en la línea 42) es la primera prueba, simplemente podemos hacer rspec spec/unit/baseball_spec.rb[1:1] o rspec spec/unit/baseball_spec.rb[1:1:1] dependiendo de cuán anidado esté el caso de prueba.


Mi método preferido para ejecutar pruebas específicas es ligeramente diferente: agregué las líneas

RSpec.configure do |config| config.filter_run :focus => true config.run_all_when_everything_filtered = true end

Para mi archivo spec_helper.

Ahora, cuando quiera ejecutar una prueba específica (o contexto, o especificación), simplemente puedo agregarle la etiqueta "enfocar" y ejecutar mi prueba de la manera normal: solo se ejecutarán las pruebas enfocadas. Si run_all_when_everything_filtered todas las etiquetas de enfoque, el run_all_when_everything_filtered y ejecuta todas las pruebas de forma normal.

No es tan rápido y fácil como las opciones de la línea de comandos; requiere que edite el archivo para la prueba que desea ejecutar. Pero te da mucho más control, me parece.


Para el modelo, se ejecutará el caso en la línea número 5 solamente

bundle exec rspec spec/models/user_spec.rb:5

Para el controlador: se ejecutará el caso en la línea número 5 solamente

bundle exec rspec spec/controllers/users_controller_spec.rb:5

Para el modelo de señal o controlador, quite el número de línea de arriba

Para ejecutar caso en todos los modelos

bundle exec rspec spec/models

Para ejecutar caso en todos los controladores

bundle exec rspec spec/controllers

Para ejecutar todos los casos

bundle exec rspec


Por lo general hago:

rspec ./spec/controllers/groups_controller_spec.rb:42

Donde 42 representa la línea de la prueba que quiero ejecutar.

EDIT1:

También puedes usar etiquetas. Ver here

EDIT 2:

Tratar:

bundle exec rspec ./spec/controllers/groups_controller_spec.rb:42


Puede pasar una expresión regular al comando de especificación que solo ejecutará los bloques que coincidan con el nombre que proporcionó.

spec path/to/my_spec.rb -e "should be the correct answer"


Puedes hacer algo como esto:

rspec/spec/features/controller/spec_file_name.rb rspec/spec/features/controller_name.rb #run all the specs in this controller


Uso esta gema protectora para ejecutar automáticamente mi prueba. Ejecuta la prueba después de crear o actualizar las operaciones en el archivo de prueba.

https://github.com/guard/guard-test

o usualmente puedes correr usando el siguiente comando

rspec spec / controllers / groups_controller_spec.rb


comenzando con rspec 2 puedes usar lo siguiente:

# in spec/spec_helper.rb RSpec.configure do |config| config.filter_run :focus => true config.run_all_when_everything_filtered = true end # in spec/any_spec.rb describe "something" do it "does something", :focus => true do # .... end end