Creo que hay una manera de ejecutar solo pruebas con una etiqueta dada. Alguien sabe?
Creo que hay una manera de ejecutar solo pruebas con una etiqueta dada. Alguien sabe?
Respuestas:
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 :awesome
se 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 .
:focus
, lo que también evita que elementos indeseables como 'binding.pry console.log` ,
, etc., ingresen a la base de código.
rspec
programa :) Porque el documento Relish no lo hace.
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.
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
config.filter_run_when_matching
y podría funcionar simplemente agregando :focus
al ejemplo
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]}}
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
.
En las versiones más nuevas de RSpec, es aún más fácil configurar el soporte fit
:
# 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
También puede ejecutar especificaciones que tienen focus: true
por 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: true
todas las pruebas, vuelva a ejecutarlas
Más información: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters
spec/spec_helper.rb
Siempre 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.
spec_helper.rb
Siempre se incluye si tiene --require spec_helper
en .rspec
la raíz del proyecto.
Puedes correr como rspec spec/models/user_spec.rb -e "SomeContext won't run this"
.