Cómo ejecutar una sola prueba RSpec?
Tengo el siguiente archivo:
/spec/controllers/groups_controller_spec.rb
¿Qué comando en terminal utilizo para ejecutar solo esa especificación y en qué directorio ejecutoel comando?
Mi archivo gem:
# 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
12 answers
Normalmente lo 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. Véase aquí.
EDITAR 2:
Intenta:
bundle exec rspec ./spec/controllers/groups_controller_spec.rb:42
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-17 23:59:49
Con rastrillo:
rake spec SPEC=path/to/spec.rb
(El crédito va a esta respuesta. Vota por él.)
EDITAR (gracias a @cirosantilli): Para ejecutar un escenario específico dentro de la especificación, debe proporcionar una coincidencia de patrón de expresiones regulares que coincida con la descripción.
rake spec SPEC=path/to/spec.rb \
SPEC_OPTS="-e \"should be successful and return 3 items\""
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:50
Puede pasar una expresión regular al comando spec que solo ejecutará it
bloques que coincidan con el nombre que proporcione.
spec path/to/my_spec.rb -e "should be the correct answer"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-15 22:43:36
Mi método preferido para ejecutar pruebas específicas es ligeramente diferente - He añadido las líneas
RSpec.configure do |config|
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
A mi archivo spec_helper.
Ahora, cada vez que quiera ejecutar una prueba específica (o contexto, o especificación), simplemente puedo agregar la etiqueta "focus" a ella, y ejecutar mi prueba como normal - solo se ejecutarán las pruebas enfocadas. Si elimino todas las etiquetas de enfoque, el run_all_when_everything_filtered
se activa 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 para editar el archivo para la prueba que desea ejecutar. Pero creo que te da mucho más control.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-21 17:47:48
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-14 00:17:14
@apneadiving la respuesta 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]
en lugar de usar un número de línea. Tomado de aquí:
RSpec 3.3 introduce una nueva forma de identificar ejemplos [...]
Por ejemplo, este comando:
$ rspec spec/unit/baseball_spec.rb[1:2,1:4]
run ejecutaría el 2do y 4to ejemplo o grupo definido bajo el 1er grupo de nivel superior definido en spec / unit / baseball_spec.rb.
Así que en lugar de hacer
rspec spec/unit/baseball_spec.rb:42
donde (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 cómo anidado el caso de prueba.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-10 17:01:07
En los carriles 5,
Usé esta manera para ejecutar un solo archivo de prueba (todas las pruebas en un solo 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 ajustar 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-16 11:46:04
Comenzando con rspec 2 puede 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-04 19:54:02
Para el modelo, se ejecutará el caso en la línea número 5 solo
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, elimine el número de línea de arriba
Para ejecutar case en todos los modelos
bundle exec rspec spec/models
Para ejecutar case en todos los controladores
bundle exec rspec spec/controllers
Para ejecutar todos los casos
bundle exec rspec
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-21 11:00:58
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'.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-24 20:58:42
Uso esta gema de guardia 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 por lo general, se puede ejecutar utilizando el siguiente comando
Rspec spec/controllers/groups_controller_spec.rb
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-02 12:15:44
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-08 10:50:26