2008-10-01 14 views
25

Estoy teniendo una suspensión de prueba en nuestra aplicación de rieles no puede determinar cuál (ya que se bloquea y no llega al informe de fallas). Encontré esta entrada 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 trato de hacer lo mismo, me da un error que dice que el número de argumentos es incorrecto para la configuración (1 para 0). Cualquier ayuda sería apreciada.Suspensión de prueba de rieles: ¿cómo puedo imprimir el nombre de prueba antes de la ejecución?

Respuesta

38

Si ejecuta la prueba usando el rastrillo que va a funcionar:

rake test:units TESTOPTS="-v" 
0

¿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 informe HTML agradable que se parece a esto:

RSpec Result http://myskitch.com/robbyrussell/rspec_results-20070801-233809.jpg

Tenía que tenía todas las pruebas en su defecto, la prueba específica serían rojo y se expandirían a las líneas específicas en las que la prueba no proporcionó usted más visibilidad sobre por qué falló la prueba y dónde debes buscar para resolver el problema.

+2

La prueba está colgando, no en su defecto, por lo que esta respuesta no es relevante. –

3

La definición en la publicación de blog debe ser específica (el método de configuración (& bloque) se define en el módulo Thoughtbot :: Shoulda en context.rb. Shoulda.rb y luego TestCase extiende ese módulo).

La definición de pura prueba :: unidad es

# File test/unit/testcase.rb, line 100 
     def setup 
     end 

lo que podría 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 

edición

si realmente no quiere editar su 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 (no tengo rubíes en torno a la prueba aunque)


Me rindo! (en frustración)

Comprobé el código y los rieles en realidad hacen magia detrás de la escena, lo que probablemente explica por qué la redefinición de ejecución no funciona.

Lo que pasa es que parte de la magia es incluir ActiveSupport :: CallBack y crear devoluciones de llamada 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 debe trabajar

y en realidad la ejecución de pruebas con el que hace el trabajo. donde estoy confundido es que esto es lo primero que intenté y falló con el mismo error que obtuviste

+0

una moneda por el esfuerzo. – nurettin

6

La impresión del nombre de la prueba es responsabilidad del 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 
+0

¿Hay alguna manera equivalente de hacer esto desde la tarea de 'pruebas de rastreo 'de Rails? – nertzy

+0

prueba de rake: unidades TESTOPTS = "- v" – allenwei

4

Esto es lo que yo 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 @@ alias previene de ser re-alias cuando se ejecuta en varios archivos a la una vez; @@ named evita que se muestre el nombre antes de cada prueba (justo antes de la primera ejecución).

0

Gracias a todos por su ayuda, terminé examinando las pruebas y agregando una llamada al nombre de registro 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.

Cuestiones relacionadas