Tests, cachés y assigns

Hola gente,

Tengo un problemilla con los tests… y creo que se debe a algo de la
caché.
Resulta que me fallan de manera arbitraria los siguientes asserts y
shouldas:

assert_not_nil assigns(:variable)
should_assign_to :variable
should_render_template :show

Esto ocurre cuando concateno varios tests sobre la misma acción cacheable.

El primero sale bien pero el segundo y subsiguientes fallan por ‘nil’.

Tengo cosas como esta (versionado, puede que haya fallos de sintaxis):


context “on GET to :show” do
setup do
get(
:show,
:is => 10
)
end

should_assign_to :variable1
should_assign_to :variable2
should_assign_to :variable3
should_respond_with :success
should_render_template :show
should_not_set_the_flash

end

Los ‘should_assign_to’ funcionan si los pongo de uno en uno pero no si
pongo más de uno… lo mismo con el ‘should_respond_with’ que tiene que
estar sólo para funcionar.

No sé… tampoco sé muy bien como preguntar a google.

Cualquier sugerencia es bienvenida :slight_smile:

Saludos
f.

Ah¡… no es cosa de shoulda pues si concateno varios tests normales como
estos:


def test_should_show
get :show, :id => ‘1’
assert_not_nil assigns(:variable)
end

def test_should_show_02
get :show, :id => ‘1’
assert_not_nil assigns(:variable)
end

También hay uno que falla… si lo dejo sólo no, sólo cuando están los 2.

Saludos
f.

2008/6/26 Fernando G. [email protected]:

2008/6/26 Fernando G. [email protected]:

assert_not_nil assigns(:variable)

El primero sale bien pero el segundo y subsiguientes fallan por ‘nil’.
end


Fernando Guillén
Desarrollador Web Freelance
http://www.fernandoguillen.info


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

Durante los test la cache, por defecto, está desactivada, por lo que
las cosas no deberían ir por ahí. De cualquier forma, mira que en
config/environments/test.rb perform_caching esté a false.

Suerte.

2008/6/26 Fernando G. [email protected]:

Es el capullín del cache-test:
Test::Unit::TestCase.class_eval do
f.
Vaya, he utilizado cache_test y no me sucedía eso, pero posiblemente
era porque en mis funcionales no tengo varios test que hagan get del
mismo recurso.

No lo he comprobado, pero quizá funcione: en cache_test/init.rb
comenta las dos líneas que terminan en .configure, y después en el
setup de los test que utilices cache_test haz la llamada a esa función
(en la consola no parecia pasar “nada” por hacer la llamada varias
veces).

Suerte.

Hi,

El día 26 de junio de 2008 23:19, Daniel R.
Troitiño[email protected]
escribió:

Durante los test la cache, por defecto, está desactivada, por lo que
las cosas no deberían ir por ahí. De cualquier forma, mira que en
config/environments/test.rb perform_caching esté a false.

Es el capullín del cache-test:
http://blog.cosinux.org/pages/page-cache-test

Que en uno de sus ficheritos tiene esto:


def self.configure #:nodoc:
  ActionController::Base.perform_caching = true     # <<---- aquí 

si lo cambio a false funciona
ActionController::Base.fragment_cache_store = TestStore.new

  Test::Unit::TestCase.class_eval do
    include Assertions
  end
end

No controlo mucho todavía… y no sé muy bien como parsearlo… ni
siquiera sé si esto tiene la culpa o es algún errorcillo mío.

Sigo investigando, pero si se os ocurre algo… no os cortéis :slight_smile:

f.

El día 27 de junio de 2008 1:30, Daniel R.
Troitiño[email protected]
escribió:>> http://blog.cosinux.org/pages/page-cache-test

 end

Vaya, he utilizado cache_test y no me sucedía eso, pero posiblemente
era porque en mis funcionales no tengo varios test que hagan get del
mismo recurso.

Yo tampoco solía hacerlo pero ahora intentando meterme con shoulda
resulta que segmenta mucho los tests… y cada test tiene su
peticiónget/post.

Por ejemplo cada una de estas:

should_assign_to :forums_topic
should_assign_to :forums_forum
should_assign_to :forums_category
should_render_template :show

Hace un get… y el primero funa y los demás petan.

No lo he comprobado, pero quizá funcione: en cache_test/init.rb
comenta las dos líneas que terminan en .configure, y después en el
setup de los test que utilices cache_test haz la llamada a esa función
(en la consola no parecia pasar “nada” por hacer la llamada varias
veces).

oki. Si comento las líneas en el init.rb ya no cachea y los test
normales no petan.

Pero poniéndolas en el setup de los test de caché tampoco no me
funciona: me dá error de métodos no declarados:

NoMethodError: undefined method assert_expire_actions' for NoMethodError: undefined method assert_cache_actions’ for

En cualquier caso esta opción no me vale del todo pues en el mismo
test funcional mezclo comprobaciones de success, assigns y cachés. Y
para unos debe estar activado la caché y para otros no.

El workarround que me ha funcionado por ahora es poner:
ActionController::Base.fragment_cache_store.reset

En el setup de los tests.

Muchas gracias, Daniel…

Saludos
f.