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
Author: fresskoma, 2011-05-25

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
 416
Author: apneadiving,
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\""
 59
Author: Grant Birchmeier,
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"
 49
Author: Douglas F Shearer,
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.

 23
Author: GlyphGryph,
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
 20
Author: Michael Durrant,
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.

 5
Author: Ingo,
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:

introduzca la descripción de la imagen aquí

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
 3
Author: Alupotha,
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
 1
Author: Rudi,
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 
 1
Author: Sandeep Kapil,
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'.

 0
Author: MissingHandle,
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

 0
Author: Rameshwar Vyevhare,
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
 0
Author: Prabhakar,
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