Quien me conoce (al menos en el lado técnico de la vida
) sabe que soy un gran entusiasta de las convenciones, como forma de ahorrar trabajo, y problemas de comunicación. Y que una de las razones de que guste tanto Rails, el framework de desarrollo web escrito en Ruby, es que abraza a tope el principio de "Convención sobre Configuración".
Sin embargo, a veces nos puede dar algún problema "divertido", y sería injusto no reconocerlo también. Además, como con todo en esta vida, suele haber arreglo.
Pues resulta que para testear en Ruby y Rails, tu añades métodos a una clase que empiecen por test, y el los ejecuta solo. Convención.
También resulta que si tienes un archivo en test/fixtures/loquesea.yml y lo cargas con
fixtures :loquesea
pues él te añade un método llamado loquesea que te sirve para acceder a los datos que tengas en el archivo:
loquesea(:clave)
Convención pura y dura y además muy cómodo.
Lo divertido llega cuando tienes un modelo que se llame, por ejemplo, Testimonial, y lo quieres testear (recuerda que siempre lo quieres testear):
class TestimonialTest < ActiveSupport::TestCase fixtures :testimonials def test_loquesea ... end end
Pues ya te lo irás imaginando:
- Se cargan las fixturas, y se define dinámicamente el método testimonials
- Se definen todos los tuyos
- Ruby llama a todos los métodos que empiecen por test, sin parámetros
- testimonials espera un parámetro. Explosión nuclear
- Tú te vuelves loco buscando el fallo
Bueno, tú no porque ya te lo he contado ![]()
La cosa tiene fácil arreglo, una vez lo has pillado:
class TestimonialTest < ActiveSupport::TestCase fixtures :testimonials alias_method :fixtures_testimonials, :testimonials undef_method :testimonials def test_loquesea ... end end
Lo cual crea una copia del método testimonials llamada fixtures_testimonials (que convenientemente no empieza por test y que será el que usaremos), y después manda al original al cielo de los métodos.
Una tontería pero me ha costado un ratico la verdad. Aún así sigo adorando la Convención Sobre Configuración (que se sepa).

Escribe un comentario
Los comentarios están cerrados