ruby - spec - ¿Es posible ejecutar una única prueba en MiniTest?
pruebas unitarias ruby (11)
Estoy buscando una funcionalidad similar a rspec ruta / a / archivo.rb -l 25
¡Sip! Usa la gema "m" de Nick Quaranto . Con eso puedes decir:
m spec/my_spec.rb:25
Puedo ejecutar todas las pruebas en un solo archivo con:
rake test TEST=path/to/test_file.rb
Sin embargo, si quiero ejecutar solo una prueba en ese archivo, ¿cómo lo haría?
Estoy buscando una funcionalidad similar a:
rspec path/to/test_file.rb -l 25
Estoy buscando una funcionalidad similar a:
rspec path / to / test_file.rb -l 25
Hay una gema que hace exactamente eso: minitest-line
.
gem install minitest-line
ruby test/my_file -l 5
El comando debería ser:
% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"
En realidad puedes ejecutar solo el nombre o incluso el número:
-n, --name PATTERN Filter run on /pattern/ or string.
p.ej:
ruby spec/stories/foo_spec.rb --name 3
FAIL (0:00:00.022) test_0003_has foo
Expected: "foo"
Actual: nil
Esta es una de las cosas que me molestan acerca de la string name definition
la string name definition
en las pruebas.
Cuando tengas:
def test_my_test
end
usted siempre sabe cómo se nombra su prueba para que pueda ejecutarla así:
ruby my_test -n test_my_test
Pero cuando tienes algo como:
it "my test" do
end
nunca está seguro de cómo esta prueba recibe el nombre interno, por lo que no puede usar la opción -n
solo directamente.
Para saber cómo se denomina internamente esta prueba, solo tiene una opción: ejecutar todo el archivo para tratar de descubrir buscando en los registros.
Mi solución es (temporalmente) agregar algo al nombre de prueba muy único como:
it "my test xxx" do
end
y luego use la versión RegEx del parámetro ''-n'' como:
ruby my_test.rb -n /xxx/
Has probado:
ruby path/to/test_file.rb --name test_method_name
Hay 2 formas de hacerlo:
- Ejecute las pruebas ''manualmente'' (vea la respuesta de Andrew Grimm).
- Hack
Rake::TestTask
objetivo para utilizar un cargador de pruebas diferente.
Rake::TestTask
(de rake 0.8.7) teóricamente puede pasar opciones adicionales a MiniTest::Unit
con una opción de línea de comando "TESTOPTS=blah-blah"
, por ejemplo:
% rake test TEST=test/test_foobar.rb TESTOPTS="--name test_foobar1 -v"
En la práctica, la opción --name
(un filtro para los nombres de prueba) no funcionará, debido a las partes internas del rake. Para solucionarlo, tendrás que escribir un pequeño parche de mono en tu Rakefile:
# overriding the default rake tests loader
class Rake::TestTask
def rake_loader
''test/my-minitest-loader.rb''
end
end
# our usual test terget
Rake::TestTask.new {|i|
i.test_files = FileList[''test/test_*.rb'']
i.verbose = true
}
Este parche requiere que crees una test/my-minitest-loader.rb
archivo test/my-minitest-loader.rb
:
ARGV.each { |f|
break if f =~ /^-/
load f
}
Para imprimir todas las opciones posibles para Minitest, escriba
% ruby -r minitest/autorun -e '''' -- --help
No se requiere gema: ruby -Itest test/lib/test.rb --name /some_test/
Fuente: http://blog.arvidandersson.se/2012/03/28/minimalicous-testing-in-ruby-1-9
Puede usar esto para ejecutar un solo archivo:
rake test TEST=test/path/to/file.rb
Yo también utilicé
ruby -I"lib:test" test/path/to/file.rb
para una mejor visualización.
Si está utilizando MiniTest con Rails 5, la mejor manera de ejecutar todas las pruebas en un solo archivo es:
bin/rails test path/to/test_file.rb
Y para una prueba única (por ejemplo, en la línea 25):
bin/rails test path/to/test_file.rb:25
Ver http://guides.rubyonrails.org/testing.html#the-rails-test-runner
Si está utilizando Turn gem con minitest, solo asegúrese de usar la opción Turn.config.pattern
ya que Turn Minitest runner no respeta la opción --name en ARG.