Hola comunidad, tengo un pequeño problema que tal vez me surge por la
comprensión incorrecta del trabajo de los Mocks, el escenario es el
siguiente:
Tendo 2 modelos: Aritulo y Comentario
Un artÃculo tiene muchos comentarios y un comentario pertenece a un
artÃculo
Las asociaciones aun no he declarado las asociaciones
Entonces, quiero describir el comportamiento de la accion “show” del
controlador articulos, cuando este no tiene comentarios:
…
it “deberia tener 0 comentarios” do
Articulo.should_receive(:find).with(“1”).and_return(@articulo) @articulo.should_receive(:comentarios).and_return([])
do_show
assigns[:articulo].should equal(@articulo)
assigns[:comentarios].should be_empty
end
…
En el controlador:
…
def show @articulo = Articulo.find(params[:id]) @comentarios = @articulo.comentarios
end
…
La especificación pasa correctamente ya que el mock ‘articulo’ tiene
definido el metodo ‘comentarios’, entonces mi consulta es: porque no me
tira
ningun error si el metodo en el verdadero codigo aun no existe, es decir
la
asociacion no se ha definido(has_many :comentarios), o es que acaso un
mock
puede definir un metodo que no ha sido definido en la clase que esta
mockeando?. Me parece que me estoy rayando un poco, pero de todas
maneras en
una duda que tengo y algo que me preocupa, ya que yo no me doy cuenta
del
error hasta que vaya directamente al navegador e invoque a la acción del
controlador.
Creo que una de las salidas podrÃa ser usar fixtures, pero trato de
evitar
los fixtures, porque creo que se hacen completo conforme las
asociaciones
van creciendo, bueno espero sus sugerencias, muchas gracias por su
tiempo.
Personalmente creo que lo está realizando correctamente. En esa spec
está comprobando el método show, que simplemente tiene que rellenar
dos variables @articulo y @comentarios, por lo que el test está bien
realizado.
La existencia o no del método comentarios debería comprobarse en los
specs del modelo Artículo, no en los spects del controlador de
artículos. Los dos juntos comprobarían tanto el funcionamiento de
Articulo como el funcionamiento de ArticulosController.
De todas formas las pruebas y los specs son temas muy difíciles de
discutir, por ejemplo alguién podría decirte que tus mocks te unen
mucho a tu implementación del método, y que si esta cambia tus pruebas
deberían ser modificadas, aunque las postcondiciones del método
siguiesen cumpliendose. Como digo, muy complicado de hacer pruebas que
gusten a todos.