ruby - tests - ¿Cómo ejecuto solo pruebas específicas en Rspec?
run spec rails (9)
A partir de RSpec 2.4 (supongo) puede anteponer una f
o x
a it
, specify
, describe
y context
:
fit ''run only this example'' do ... end
xit ''do not run this example'' do ... end
http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#fit-class_method http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#xit-class_method
Asegúrese de tener config.filter_run focus: true
y config.run_all_when_everything_filtered = true
en su spec_helper.rb
.
Creo que hay una manera de ejecutar solo pruebas con una etiqueta determinada. ¿Alguien sabe?
En las versiones más nuevas de RSpec, es aún más fácil configurar el fit
soporte:
# spec_helper.rb
# PREFERRED
RSpec.configure do |c|
c.filter_run_when_matching :focus
end
# DEPRECATED
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
Ver:
https://relishapp.com/rspec/rspec-core/docs/filtering/filter-run-when-matching
https://relishapp.com/rspec/rspec-core/v/3-7/docs/configuration/run-all-when-everything-filtered
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
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 sobre GitHub . (Cualquier persona con un enlace mejor, por favor asesorar)
(actualizar)
RSpec ahora está magníficamente documentado aquí . Vea la sección de opción --tag para más detalles.
A partir de v2.6, este tipo de etiqueta se puede expresar aún más simplemente al incluir la opción de configuración treat_symbols_as_metadata_keys_with_true_values
, que le permite hacer:
describe "Awesome feature", :awesome do
donde :awesome
se trata como si 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 .
Puede ejecutar como rspec spec/models/user_spec.rb -e "SomeContext won''t run this"
.
Puede ejecutar todas las pruebas que contengan una cadena específica con la opción --example (o -e) :
rspec spec/models/user_spec.rb -e "User is admin"
Yo uso ese más.
También puede ejecutar especificaciones que tengan focus: true
de manera predeterminada
spec / spec_helper.rb
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
Entonces simplemente ejecuta
$ rspec
y solo se ejecutará la prueba enfocada
luego, cuando elimines el focus: true
todas las pruebas se ejecutarán de nuevo
Más información: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters
También puede enhebrar 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]}}
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)