¿Cómo se ejecuta un único archivo de prueba / especificación en RSpec?


Quiero poder ejecutar las pruebas de un solo archivo spec, por ejemplo, para el archivo que estoy editando. rake spec ejecuta todas las especificaciones. Mi proyecto no es un proyecto Rails, así que rake spec:doc no funciona.

No sé si esto importa, pero aquí está mi estructura de directorios.

./Rakefile
./lib
./lib/cushion.rb
./lib/cushion
./lib/cushion/doc.rb
./lib/cushion/db.rb
./spec
./spec/spec.opts
./spec/spec_helper.rb
./spec/db_spec.rb
Author: John Bachir, 2008-09-27

14 answers

O puedes saltarte el rake y usar el comando 'rspec':

rspec path/to/spec/file.rb

En su caso creo que siempre y cuando su./spec / db_spec.el archivo rb incluye los ayudantes apropiados, debería funcionar bien.

Si está utilizando una versión anterior de rspec es:

spec path/to/spec/file.rb
 345
Author: Cameron Booth,
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
2012-05-05 04:13:16

La invocación cruda:

rake spec SPEC=spec/controllers/sessions_controller_spec.rb \
          SPEC_OPTS="-e \"should log in with cookie\""

Ahora averigua cómo incrustar esto en tu editor.

 195
Author: mislav,
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
2012-04-04 21:35:09

Esta pregunta es antigua, pero aparece en la parte superior de Google al buscar cómo ejecutar una sola prueba. No se si es una adición reciente, pero para ejecutar una sola prueba de una especificación se puede hacer lo siguiente:

rspec path/to/spec:<line number>

Where-line number - es un número de línea que contiene parte de su prueba. Por ejemplo, si tuviera una especificación como:

1: 
2: it "should be awesome" do
3:   foo = 3
4:   foo.should eq(3)
5: end
6:

Digamos que está guardado en spec/models/foo_spec.rb. Entonces correrías:

rspec spec/models/foo_spec.rb:2

Y solo ejecutaría esa especificación. En de hecho, ese número podría ser de 2 a 5.

Espero que esto ayude!

 106
Author: juanpaco,
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-03-31 13:53:06

También puede usar el texto real del caso de prueba *e*xample con -e!

Así que para:

it "shows the plane arrival time"

Puede usar

rspec path/to/spec/file.rb -e 'shows the plane arrival time'
./scripts/spec path/to/spec/file.rb -e 'shows the plane arrival time'

No hay necesidad de rastrillo aquí.

 57
Author: tcurdt,
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-03-17 12:25:39

De help (spec-h):

-l, --line LINE_NUMBER           Execute example group or example at given line.
                                 (does not work for dynamically generated examples)

Ejemplo: spec spec / runner_spec.rb-l 162

 18
Author: boblin,
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
2010-08-17 10:10:24

Si instaló rspec como un plugin en lugar de como una gema, entonces no tendrá el ejecutable spec.

En cualquier caso, todo lo que necesita hacer es ejecutar el archivo usando ruby. El código rspec es lo suficientemente inteligente como para ejecutar las pruebas por usted.

Eg:

ruby myclass_spec.rb
 12
Author: Orion Edwards,
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
2008-09-28 20:04:38

Http://github.com/grosser/single_test te permite hacer cosas como..

rake spec:user          #run spec/model/user_spec.rb (searches for user*_spec.rb)
rake test:users_c       #run test/functional/users_controller_test.rb
rake spec:user:token    #run the first spec in user_spec.rb that matches /token/
rake test:user:token    #run all tests in user_test.rb that match /token/
rake test:last
rake spec:last
 12
Author: Zeke,
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
2009-12-15 18:29:35

Ruby 1.9.2 y Rails 3 tienen una manera fácil de ejecutar un archivo spec:

  ruby -I spec spec/models/user_spec.rb

Explicación:

  • ruby el comando tiende a ser más rápido que el comando rake
  • -I spec significa "incluir el directorio 'spec' al buscar archivos"
  • spec/models/user_spec.rb es el archivo que queremos ejecutar.
 10
Author: joelparkerhenderson,
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-04-14 03:05:14

Estaba teniendo problemas para conseguir cualquiera de estos ejemplos para trabajar, tal vez porque el mensaje es viejo y los comandos han cambiado?

Después de investigar un poco encontré que esto funciona:

Rspec spec/models/user_spec.rb

Que ejecutará solo el archivo único y proporciona una salida útil en el terminal.

 5
Author: Greg Hemphill,
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-03-01 17:10:31

Specky.vim

 4
Author: ,
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
2009-01-11 06:22:07

Para ejecutar todos de sus archivos rspec: rspec

nota: debes estar en la raíz de tu proyecto

Para ejecutar un archivo rspec: rspec 'path_to/spec.rb'

nota: sustitúyase " path_to / spec.rb ' con su camino. Las comillas son opcionales.

Para ejecutar una rspec test de un archivo: rspec 'path_to/spec.rb:7'

nota:: 7 es el número de línea donde comienza la prueba

 4
Author: nflauria,
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-11-01 21:44:24

Alternativamente, eche un vistazo a autotest.

Ejecutar autotest en una ventana de comandos significará que el archivo spec se ejecutará cada vez que lo guarde. Además, se ejecutará cada vez que se ejecute el archivo que está especificando.

Por ejemplo, si tiene un archivo de especificaciones del modelo llamado person_spec.rb, y un archivo de modelo que está speccing llamado persona.rb, luego cada vez que guarde cualquiera de estos archivos desde su editor, se ejecutará el archivo spec.

 3
Author: fatgeekuk,
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
2008-10-03 09:12:30

Digamos que estás ejecutando test para crear todo. Siempre puede ejecutar ese código específico de especificaciones de tareas usando el archivo crete_spec.archivo rb como a continuación.

      rspec/spec/features/controller/spec_file_name.rb

   Example:

   Creating  rspec spec/features/todos/create_spec.rb
   Editing   rspec spec/features/todos/edit_spec.rb
   Deleting  rspec spec/features/todos/destroy_spec.rb

Si desea ejecutar todas las especificaciones en un solo corto.

   rspec 

Si desea ejecutar todas las especificaciones en un usuario controlador específico esto.

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

¡Espero que te dé más comprensión!

 2
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:43:46

Aunque se escribieron muchas grandes respuestas a esta pregunta, ninguna de ellas utiliza el Rspec tags acérquense.

Utilizo etiquetas para ejecutar una o más especificaciones en archivos diferentes only solo aquellos relacionados con mi tarea de desarrollo actual.

Por ejemplo, agrego la etiqueta " dev "con el valor"current":

it "creates an user", dev: :current do
  user = create(:user)
  expect(user.persisted?).to be_truthy
end

Entonces corro

bundle exec rspec . --tag dev:current

Se pueden establecer diferentes etiquetas/valores en especificaciones individuales o grupos.

 0
Author: Victor BV,
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-15 15:18:41