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 |

Rails 3 en Ubuntu Lucid con RVM

Posted by David Sedeño 30/07/2010 at 17h45

Hace unos días salió la versión RC de Rails3. Para instalarla en una Ubuntu Lucid recien instalada (sin ruby ni nada) lo mejor es hacerlo a través de RVM.

 

Instalamos sofware básico:

sudo apt-get install build-essential git-core curl libsqlite3-dev libssl-dev libreadline-dev ncurses-dev libxml2-dev libxslt1-dev

Instalamos RVM:

bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

Añadimos a nuestro $HOME/.bashrc la linea:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

Abrimos una nueva shell (o hacemos source .bashrc).

Instamos Ruby 1.9.2 (en estos momentos la versión instalada es la RC):
 

rvm install 1.9.2
 

Usamos esa versión de ruby:


rvm use ruby-1.9.2
 

Instalamos sqlite3 y rails con gem:
 

gem install sqlite3-ruby
gem install rails

Posted in , | no hay comentarios |

Gmate

Posted by David Sedeño 05/11/2009 at 20h41

Después de instalar Ubuntu Karmic en una de mis máquinas me puse a instalar y configurar mis aplicaciones típicas.

Para programar uso Gedit con una serie de plugins. Buscando por ahí me topé con el proyecto Gmate que consiste en poner los plugins y configuraciones necesarias para emular al famoso TextMate de Mac, muy usado por los programadores Rails.

La verdad que mola mucho como deja Gedit.

Posted in , | no hay comentarios |

Cucumber

Posted by David Sedeño 23/05/2009 at 17h36

Mi punto flojo dentro del mundo de la programación Rails siempre ha sido el Testing. Siempre que me ponía a estudiarlo, los comienzos eran prometedores pero después resultaba bastante complejo y, por qué no decirlo, aburrido.

Hace poco quise ponerme al día en este campo y utilizar nuevas herramientas, como Cucumber. Más que para testing de aplicaciones, es una herramienta para realizar BDD (Behaviour Driven Development o Desarrollo orientado al comportamiento) y lo que es mejor, es divertida :)

Se utilizar lenguaje natural, por defecto inglés pero se pueden utilizar en otros idiomas como el español (aunque yo la uso en inglés) para describir características de nuestra aplicación. Por poner un ejemplo:

Given I'm logged in

And I there are products "ordenador", "teclado"

When I go to the list of products

Then I should see "ordenador"

And I should see "teclado"

Con esto, cucumber intenta parsear estas acciones o pasos con definiciones en ruby. La estructura está fijada en Given/When/Then. Given para poner la aplicación en un estado conocido, When para definir la acción realizada y Then para describir el resultado deseado.

En definitiva, una herramienta que me ha descubierto un campo nuevo en la forma de desarrollar aplicaciones web.

Para más información sobre cucumber, recomiento este railscasts sobre el tema.

Posted in | no hay comentarios |