Killall-9.NET

Blog de David Sedeño

Depurando Test/unit con Rails

Posted by David Sedeño 28/04/2011 at 13h47

A veces necesitamos depurar dentro de un test unitario en Rails. Para ello instalamos la gema ruby-debug en ruby < 1.9 y ruby-debug19 para ruby para esta versión de ruby. Podemos poner la linea:

gem 'ruby-debug19', :require => 'ruby-debug'

En el fichero Gemfile de nuestro proyecto Rails y ejecutar:

bundle install

En el test que queremos depurar añadir la línea:

require 'ruby-debug'

y justo antes de la linea que queremos depurar añadir la línea:

debugger

Una vez que el código llegue a esta línea nos saltará una consola rdb. En esta consola podemos arrancar una consola irb y así tener acceso a los objetos de nuestro test. Por ejemplo, en un caso real:

#ruby -Itest test/unit/event_test.rb
Loaded suite test/unit/event_test
Started
.F..test/unit/event_test.rb:54
assert @world_image.save
(rdb:1) @world_image
*** Unknown command: "@world_image".  Try "help".
(rdb:1) irb
ruby-1.9.2-p180 :001 > @world_image
 => #<Image id: nil, world_id: 558, created_at: nil, updated_at: nil, image_file_name: "avatar.jpg", image_content_type: "image/jpeg", image_file_size: 13170, image_updated_at: "2011-04-28 13:45:59", uploader_id: 1415>
ruby-1.9.2-p180 :002 > @world_image.save
 => false
ruby-1.9.2-p180 :003 > @world_image.errors
 => {:image=>["Paperclip::CommandNotFoundError", "Paperclip::CommandNotFoundError"]}

Con esta sesión vemo que el error proviene de Paperclip, que no encuentra un comando. Este ejemplo es significativo porque el test pasaba sin problemas en la máquina de los desarrolladores y no en el servidor de Integración Continua y con este sesión de debug dimos con el problema.

Posted in | no hay comentarios |

Trackbacks

Use the following link to trackback from your own site:
http://www.killall-9.net/trackbacks?article_id=824