2009/11/13 Ricardo Markiewicz <[email protected]>:
> 2009/11/13 Nicolás Sanguinetti <[email protected]>:
>> 2009/11/13 Ricardo Markiewicz <[email protected]>:
>>> Voy a tener que poner @user.should_receive("reload") en varios lados
>>> para que nadie me borre esas lineas por error :D (no pongo :S porque
>>> esta lloviendo y estoy contento :P)
>>
>> Er, eww? Tu test no esta testeando que el usuario se recargue, es un
>> efecto secundario del test. Ergo, no pongas una expectation. Si sacan
>> el @user.reload el test debería fallar, y eso debería ser suficiente.
>>
>> Como mucho dejá un comentario, pero es más fácil contarle al equipo
>> por qué hiciste eso. O bueno, cuando tus team mates vean el commit en
>> how's my code van a preguntar por qué y listo, no? ;)
>
> No, eso si, no me hice entender por mirar la lluvia :P.
>
> A lo que me referia, es que si tengo un controller despues que crea
> operaciones, y luego, por ejemplo, manda un mail al usuario avisandole
> que ahora tiene XX puntos, en ese controller tengo que arrastrar el
> reload y me tengo que acordar en cada lado que haga test y necesite
> tener el score actualizado justo en la linea que sigue, que en el
> medio tengo que hacer un reload. No se si ahora se entiende mejor o
> peor :P

Se entiende mejor.

Y no, lo que haces es agregar lógica en tus modelos. En lugar de

current_user.operations.create(:name => "Blah", :points => 100)
current_user.reload

Tendrías algo como

current_user.add_operation("Blah", 100)

class User
  def add_operation(name, points)
    operations.create(:name => "Blah", :points => points)
    self.points += points
    self
  end
end

Ponele que en lugar de `self.points += points` podrías poner el
reload, pero dado que el reload sería sólo para que el render después
tenga datos actualizados, y no sigue ningún propósito de verdad, me
ahorraría el query al pedo. O no, y poné un reload, si te parece que
queda más claro.

>
>> Y si te jode mucho lo del reload, hacé custom matchers, o helpers en los 
>> specs.
>>
>> lambda { @user.operations.make(:points => 100) }.should
>> increase_user_points_by(100)
>>
>> Y por el código que pusiste ahí arriba, estás creando modelos a mano.
>> Machinist va a ser tu nuevo mejor amigo:
>> http://github.com/notahat/machinist
>
> Yeah, la idea va a ser un custom matcher mas que nada para que quede
> menos feo a la vista :)
>
> --
> --
> Ricardo Markiewicz
> http://www.gazer.com.ar/
> http://www.voyovoy.com/ - ¿Qué hay para hacer?
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a