Ruby on Rails, el plugin cache-test y la activación de la caché en los tests
Este es mi primer apunte seudo-técnico sobre RoR. No es muy profundo, en realidad lo dejo caer aquí como nota mental.
Resulta que cuando instalas el interesantísimo plugin para testear cachés y sweepers: cache-test, éste tiene en su configuración la activación de las cachés en modo test:
ActionController::Base.perform_caching = true
Tanto en el fragment_cache_test.rb como en el page_cache_test.rb.
Hasta ahora esto no me había causado ningún conflicto pues sólo hacía una llamada a una página get/post cacheada en cada test y con la misma llamada comprobaba todo.
Pero con Shoulda se hacen varias llamadas a la misma página en cada llamada se comprueba una cosa y si la página está cacheada hay varias cosas que pueden fallar como éstas:
context "on GET to :show" do setup do get( :show, :id => '1' ) end should_assign_to :variable1 should_assign_to :variable2 should_assign_to :variable3 should_render_template :show end
Aquí se hace una llamada get para cada should_ , el primero funcionará pero los posteriores al estar activada la caché fallarán porque la variable o la vista buscada tendrá valor ‘nil‘.
Este no es un problema de Shoulda, simplemente no me había aparecido hasta ahora. Con los tests normales surgirá igual si tienes la caché activada y haces 2 llamadas a la misma página cacheada y esperas encontrar una variable asignada, la segunda en ejecutarse fallará.
Workarround
Lo único que he encontrado por ahora es poner esto en el setup de los tests:
ActionController::Base.fragment_cache_store.reset
Para mí me funciona, para mis tests y para la configuración de mis cachés, puede que a ti no te funcione.
Y lo que si puede ser es que tengas una solución mejor, plis coméntala.