¿Cómo ejecuto solo pruebas específicas en Rspec?

159

Creo que hay una manera de ejecutar solo pruebas con una etiqueta dada. Alguien sabe?

Nathan Long
fuente

Respuestas:

186

No es fácil encontrar la documentación, pero puede etiquetar ejemplos con un hash. P.ej.

# spec/my_spec.rb
describe SomeContext do
  it "won't run this" do
    raise "never reached"
  end

  it "will run this", :focus => true do
    1.should == 1
  end
end

$ rspec --tag focus spec/my_spec.rb

Más información en GitHub . (cualquier persona con un mejor enlace, por favor avise)

(actualizar)

RSpec ahora está magníficamente documentado aquí . Vea la sección de opciones --tag para más detalles.

A partir de la v2.6, este tipo de etiqueta se puede expresar aún más simplemente incluyendo la opción de configuración treat_symbols_as_metadata_keys_with_true_values, que le permite hacer:

describe "Awesome feature", :awesome do

donde :awesomese trata como si lo fuera :awesome => true.

También vea esta respuesta sobre cómo configurar RSpec para ejecutar automáticamente pruebas 'enfocadas'. Esto funciona especialmente bien con Guard .

zetetic
fuente
Para que no tenga que buscar, el enlace directo a la sugerencia de zetetic está aquí (para Rspec 2.12) relishapp.com/rspec/rspec-core/v/2-12/docs/command-line/…
tir38
Agregamos una especificación a nuestra suite para garantizar que el código nunca se fusione con el foco: cierto aún en el control de código fuente. gist.github.com/jwg2s/7361603
jwg2s
@ jwg2s Utilizo un gancho de git para bloquear las confirmaciones :focus, lo que también evita que elementos indeseables como 'binding.pry console.log` , , etc., ingresen a la base de código.
Zetetic
1
@Otheus no, solo soy un fan :) Realmente me gusta lo que hicieron en Relish, pero SO acaba de lanzar su propia función de documentación, por lo que podemos ver algo de competencia.
zetetic
1
Tal vez pueda señalarme en el camino de la documentación que realmente describe el uso y el comportamiento real del rspecprograma :) Porque el documento Relish no lo hace.
Oteo
111

Puede ejecutar todas las pruebas que contienen una cadena específica con la opción --example (o -e) :

rspec spec/models/user_spec.rb -e "User is admin"

Lo uso más.

Jan Minárik
fuente
90

En su spec_helper.rb:

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

y luego en sus especificaciones:

it 'can do so and so', focus: true do
    # This is the only test that will run
end

También puede enfocar las pruebas con 'ajuste' o excluir con 'xit', así:

fit 'can do so and so' do
    # This is the only test that will run
end
Tom Chapin
fuente
1
En rspec 3.5, es config.filter_run_when_matchingy podría funcionar simplemente agregando :focusal ejemplo
Ali Ghanavatian
44
Si se confirma accidentalmente 'focus: true', su CI pasará a pesar de no ejecutar la mayoría de las pruebas.
zach
67

alternativamente, puede pasar el número de línea: rspec spec/my_spec.rb:75- el número de línea puede apuntar a una sola especificación o un bloque de contexto / descripción (ejecutando todas las especificaciones en ese bloque)

Alex Lang
fuente
50

También puede encadenar varios números de línea junto con dos puntos:

$ rspec ./spec/models/company_spec.rb:81:82:83:103

Salida:

Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}
Jonathon Batson
fuente
¡Esto es tan dorado! 🙇🏾‍♂️
iGbanam
3

También puede ejecutar especificaciones que tienen focus: truepor defecto

spec / spec_helper.rb

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

Entonces simplemente corre

$ rspec

y solo se ejecutará una prueba enfocada

luego, cuando elimine focus: truetodas las pruebas, vuelva a ejecutarlas

Más información: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters

itsnikolay
fuente
¿ spec/spec_helper.rbSiempre está incluido? ¿O solo si no se dan opciones? ¿Por qué los módulos de prueba tienen require 'spec_helber', y el hecho de no tener el código anterior, elimina la posibilidad de ejecutar una sola prueba al especificar el archivo? No puedo encontrar ninguna documentación sobre esto.
Oteo
1
spec_helper.rbSiempre se incluye si tiene --require spec_helperen .rspecla raíz del proyecto.
Kris
1

Puedes correr como rspec spec/models/user_spec.rb -e "SomeContext won't run this".

Avijit Majhi
fuente