ruby on rails - test_helper - Suspensión de prueba de rieles: ¿cómo puedo imprimir el nombre de la prueba antes de la ejecución?
rspec rails (6)
Estoy teniendo una suspensión de prueba en nuestra aplicación de rieles no puede determinar cuál (ya que se cuelga y no llega al informe de fallas). Encontré esta publicación de blog http://bmorearty.wordpress.com/2008/06/18/find-tests-more-easily-in-your-testlog/ que agrega un gancho de instalación para imprimir el nombre de la prueba, pero cuando intento haga lo mismo, me da un error diciendo que el número de argumentos es incorrecto para la configuración (1 para 0). Cualquier ayuda sería apreciada.
¿Qué marco de prueba estás usando? Prueba / Unidad?
Me gustaría echar un vistazo a RSpec, que proporcionaría un poco más de contexto para sus pruebas. También puede obtener un buen informe HTML que se ve así:
Resultado RSpec http://myskitch.com/robbyrussell/rspec_results-20070801-233809.jpg
Si hubiera tenido alguna prueba fallida, la prueba específica sería roja y se expandiría a las líneas específicas en las que la prueba no le proporcionó más visibilidad sobre por qué la prueba falló y dónde debe buscar para abordar el problema.
Esto es lo que uso, en test_helper.rb
class Test::Unit::TestCase
# ...
def setup_with_naming
unless @@named[self.class.name]
puts "/n#{self.class.name} "
@@named[self.class.name] = true
end
setup_without_naming
end
alias_method_chain :setup, :naming unless defined? @@aliased
@@aliased = true
end
La variable @@ aliased evita que se vuelva a crear alias cuando la ejecuta en varios archivos a la vez; @@ named evita que se muestre el nombre antes de cada prueba (justo antes de la primera ejecución).
Gracias a todos por la ayuda, terminé examinando las pruebas y agregando una llamada a log_name en cada uno de los métodos de configuración para cada archivo de prueba antes de que surgieran estas últimas respuestas. Gracias de nuevo.
La definición en la publicación de blog debe ser específica (el método de configuración (y bloqueo) se define en el módulo Thoughtbot :: Shoulda en context.rb. Shoulda.rb y luego tiene TestCase para extender ese módulo).
La definición de pure test :: unit es
# File test/unit/testcase.rb, line 100
def setup
end
lo que podrías hacer es
def setup
log_test
end
private
def log_test
if Rails::logger
# When I run tests in rake or autotest I see the same log message multiple times per test for some reason.
# This guard prevents that.
unless @already_logged_this_test
Rails::logger.info "/n/nStarting #{@method_name}/n#{''-'' * (9 + @method_name.length)}/n"
end
@already_logged_this_test = true
end
editar
Si realmente no desea editar sus archivos, puede arriesgarse a volver a abrir el caso de prueba y extender la ejecución en su lugar:
class Test::Unit::TestCase
alias :old_run :run
def run
log_test
old_run
end
end
esto debería funcionar (aunque no tengo ruby para probar)
Me doy por vencido ! (en la frustración)
Comprobé el código y los rieles realmente hacen magia detrás de la escena, lo que probablemente explica por qué no funciona redefinir la ejecución.
Lo que pasa es que parte de la magia incluye ActiveSupport :: CallBack y la creación de devoluciones de llamadas para la configuración y el desmontaje.
lo que significa
class Test::Unit::TestCase
setup :log_test
private
def log_test
if Rails::logger
# When I run tests in rake or autotest I see the same log message multiple times per test for some reason.
# This guard prevents that.
unless @already_logged_this_test
Rails::logger.info "/n/nStarting #{@method_name}/n#{''-'' * (9 + @method_name.length)}/n"
end
@already_logged_this_test = true
end
end
end
definitivamente debería funcionar
y realmente ejecutar pruebas con él funciona. donde estoy confundido es que esto es lo primero que intenté y falló con el mismo error que obtuviste
La impresión del nombre de la prueba es responsabilidad de TestRunner. Si está ejecutando sus pruebas desde la línea de comando, puede especificar la opción -v para imprimir los nombres de caso de prueba.
ejemplo:
ruby test_Foo.rb -v
Loaded suite test_Foo
Started
test_blah(TestFoo): .
test_blee(TestFoo): .
Finished in 0.007 seconds.
2 tests, 15 assertions, 0 failures, 0 errors
Si ejecuta la prueba usando rake, funcionará:
rake test:units TESTOPTS="-v"