tests test_helper test rails how ruby-on-rails ruby testing

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"