2011-10-09 13 views
8

La aplicación My Rails pasa su prueba pero luego dice 0% aprobada. Es una aplicación de Rails 3 convertida a 3.1.Pruebas de rieles que muestran 0% aprobadas cuando todas pasan

5 tests, 11 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 
0% passed 

Si genero una nueva aplicación Rails 3.1 no tiene esta línea "pasada".

1 tests, 1 assertions, 0 failures, 0 errors, 0 skips 

Ambos funcionan con 1.9.2 p290.

Intenté eliminar la unidad de prueba, pero eso no pareció marcar la diferencia y no me llamó la atención ninguna otra cosa que pudiera causarlo. Supongo que algo está desencadenando el uso de un corredor de prueba diferente.

Estas son las gemas instaladas para mi aplicación:

actionmailer (3.1.1) 
actionpack (3.1.1) 
activemodel (3.1.1) 
activerecord (3.1.1) 
activeresource (3.1.1) 
activesupport (3.1.1) 
ansi (1.3.0) 
archive-tar-minitar (0.5.2) 
arel (2.2.1) 
bcrypt-ruby (3.0.1) 
bootstrap-sass (1.3.0) 
builder (3.0.0) 
bundler (1.0.21) 
coderay (0.9.8) 
coffee-rails (3.1.1) 
coffee-script (2.2.0) 
coffee-script-source (1.1.2) 
columnize (0.3.4) 
devise (1.4.7) 
devise_rpx_connectable (0.2.2) 
enumerated_attribute (0.2.16) 
erubis (2.7.0) 
execjs (1.2.9) 
haml (3.1.3) 
hike (1.2.1) 
i18n (0.6.0) 
jquery-rails (1.0.14) 
json (1.6.1) 
json_pure (1.6.1) 
linecache19 (0.5.12) 
mail (2.3.0) 
meta_programming (0.2.2) 
method_source (0.6.6) 
mime-types (1.16) 
multi_json (1.0.3) 
orm_adapter (0.0.5) 
polyglot (0.3.2) 
pry (0.9.6.2) 
pry-doc (0.3.0) 
rack (1.3.4) 
rack-cache (1.1) 
rack-mount (0.8.3) 
rack-ssl (1.3.2) 
rack-test (0.6.1) 
rack-webconsole (0.1.2) 
rails (3.1.1) 
railties (3.1.1) 
rake (0.9.2) 
rdoc (3.10) 
rpx_now (0.6.24) 
ruby-debug-base19 (0.11.25) 
ruby-debug19 (0.11.6) 
ruby_core_source (0.1.5) 
ruby_parser (2.0.6) 
sass (3.1.10) 
sass-rails (3.1.4) 
sexp_processor (3.0.7) 
slop (2.1.0) 
sprockets (2.0.2) 
sqlite3 (1.3.4) 
test-unit (2.4.0) 
thor (0.14.6) 
tilt (1.3.3) 
treetop (1.4.10) 
turn (0.8.2) 
tzinfo (0.3.30) 
uglifier (1.0.3) 
warden (1.0.6) 
yard (0.7.2) 

Y esto es lo que me pasa con los carriles predeterminados aplicación new'd

actionmailer (3.1.1) 
actionpack (3.1.1) 
activemodel (3.1.1) 
activerecord (3.1.1) 
activeresource (3.1.1) 
activesupport (3.1.1) 
ansi (1.3.0) 
arel (2.2.1) 
builder (3.0.0) 
bundler (1.0.21) 
coffee-rails (3.1.1) 
coffee-script (2.2.0) 
coffee-script-source (1.1.2) 
erubis (2.7.0) 
execjs (1.2.9) 
hike (1.2.1) 
i18n (0.6.0) 
jquery-rails (1.0.14) 
json (1.6.1) 
mail (2.3.0) 
mime-types (1.16) 
multi_json (1.0.3) 
polyglot (0.3.2) 
rack (1.3.4) 
rack-cache (1.1) 
rack-mount (0.8.3) 
rack-ssl (1.3.2) 
rack-test (0.6.1) 
rails (3.1.1) 
railties (3.1.1) 
rake (0.9.2) 
rdoc (3.10) 
sass (3.1.10) 
sass-rails (3.1.4) 
sprockets (2.0.2) 
sqlite3 (1.3.4) 
test-unit (2.4.0) 
thor (0.14.6) 
tilt (1.3.3) 
treetop (1.4.10) 
turn (0.8.2) 
tzinfo (0.3.30) 
uglifier (1.0.3) 

EDITAR

he cortado todo desde la aplicación y lo empujó a github - https://github.com/kimptoc/zero-percent-bugette Cuando acabo de ejecutar "rake", todavía obtengo 0% pasado:

$ rake 
Loaded suite /Users/kimptoc/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/rake_test_loader 
Started 

Finished in 0.000897 seconds. 

1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 
0% passed 

1114.83 tests/s, 1114.83 assertions/s 
Coverage report generated for /Users/kimptoc/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/rake_test_loader.rb to /Users/kimptoc/dev/ruby/fran/zero-percent/coverage. 4/4 LOC (100.0%) covered. 
+0

¿Tiene algún proyecto completo que pueda ver? – Oleander

+0

Hola Oleander: déjame ver qué puedo golpear –

+1

Presiónalo a Github cuando hayas terminado. – Oleander

Respuesta

9

Si está utilizando test-unit con Rails, entonces no puede hacer nada. Creo que es un error en la gema activesupport que viene con Rails. En más detalle:

Normalmente, test-unit tiene un método add_pass que aumenta el recuento de las pruebas que pasan. Esto se llama dentro del método run(...) (archivo testcase.rb). Sin embargo, activesupport oculta/reemplaza este método con su propia implementación. Es el método run(...) archivo setup_and_teardown.rb interior (El nombre completo del método es ActiveSupport::Testing::SetupAndTeardown::ForClassicTestUnit#run()

He modificado este método de la siguiente manera:.

def run(result) 
     return if @method_name.to_s == "default_test" 

     mocha_counter = retrieve_mocha_counter(result) 
     yield(Test::Unit::TestCase::STARTED, name) 
     @_result = result 

     begin 
     begin 
      _run_setup_callbacks do 
      setup 
      __send__(@method_name) 
      mocha_verify(mocha_counter) if mocha_counter 
      end 
     result.add_pass # XXXXXXXXXXXX My Addition to count passed tests XXXXXXXXXX 
     rescue Mocha::ExpectationError => e 
      add_failure(e.message, e.backtrace) 
     rescue Test::Unit::AssertionFailedError => e 
      add_failure(e.message, e.backtrace) 
     rescue Exception => e 
      raise if PASSTHROUGH_EXCEPTIONS.include?(e.class) 
      add_error(e) 
     ensure 
      begin 
      teardown 
      _run_teardown_callbacks 
      rescue Test::Unit::AssertionFailedError => e 
      add_failure(e.message, e.backtrace) 
      rescue Exception => e 
      raise if PASSTHROUGH_EXCEPTIONS.include?(e.class) 
      add_error(e) 
      end 
     end 
     ensure 
     mocha_teardown if mocha_counter 
     end 

     result.add_run 
     yield(Test::Unit::TestCase::FINISHED, name) 
    end 

He añadido result.add_pass que no estaba allí, y ahora porcentajes debería estar bien .

ACTUALIZACIÓN: Para ayudarle a cabo la integración de este cambio y prueba/ver por sí mismo, puede clonar una esencia que he creado con el siguiente comando:

git clone git://gist.github.com/1324512.git gist-1324512 

Esto creará un archivo con el nombre : active_support_test_unit_pass_count.rb

movimiento que a su carpeta test donde test_helper.rb archivo es y requieren en su archivo test_helper.rb, exactamente antes de la definición de la clase ActiveSupport::TestCase:

require 'active_support_test_unit_pass_count' 

class ActiveSupport::TestCase 

.... 

Luego ejecute sus pruebas y vea el porcentaje de resultado. Para mí ... funcionó bien.

+0

Gracias - suena bien, aunque no ve Me ha ayudado ... intentar algunos ajustes para ver si puedo hacerlo funcionar, pero no me alegro - https://github.com/kimptoc/zero-percent-bugette –

+2

@ChrisKimpton Mi amigo, debería haber dicho ** exactamente ** antes de la definición de la clase 'ActiveSupport :: TestCase'. Mueva la línea 'require 'active_support_test_unit_pass_count'' ** exactamente ** antes. Cloné tu repositorio. Vi que no funcionó (como dijiste), luego moví la línea exactamente antes de la definición de la clase, y esta vez funcionó con éxito. Pruébalo y verás. (También he editado mi respuesta para reflejar thi) –

+0

Eso lo hizo, gracias. Parece un bugette de Rails/activesupport: lo levantará en la lista de problemas de rieles. –

1

Pruebe a extraer la unidad de prueba e instale una mini-prueba. En su Gemfile:

gem "minitest" 
+0

Gracias, pero no hay diferencia, todavía dice 0% aprobado, pero todo verde. Pensé que el minitest estaba en 1.9, pero creo que hay más en ... –

+0

¿Lo has probado sin ruby-debug19 en tu gemfile? Solo apuñalo en la oscuridad, en este momento. – WattsInABox

+0

LOL - el mismo aquí, intenté desinstalarlo también - no mejor :(. –

0

Creo que puede haber un problema con la clase Time.

+0

Ok - algo más específico ... 1.9.2 bug? Rails/Time issue? ... –

1

Me encontré con esto en una antigua aplicación Rails 3.2.22. Encontré una solución más fácil que la anterior (más arriba me dio otros errores ya que hace suposiciones sobre versiones, etc.). Agregué test-unit-rails joya a mi archivo gem, para mí tuve que bloquearlo con la versión 1.0.4 ya que era compatible con la versión de la unidad de prueba que estaba usando anteriormente.

En mi archivo test_helper.rb añadí:

require "test/unit/active_support" 
require 'active_support' 

Here's los documentos que encontraron desde. Específicamente, es un complemento de soporte activo para la unidad de prueba.

Cuestiones relacionadas