Disable Rails caching in test environment?

Is there a way to make Rails.cache.fetch always execute the code block in the test environment? (disable caching)

For example in my test console on Rails 3

ruby-1.9.2-rc2 > Rails.cache.fetch('foo') {'bar'} => "bar" ruby-1.9.2-rc2 > Rails.cache.fetch('foo') {'bar44'} => "bar"

Caching is on. Using filestore

ruby-1.9.2-rc2 > Rails.cache => #<ActiveSupport::Cache::FileStore

Is there a ActiveSupport::Cache::Store implementation that doesn't cache? I'm assuming I'm just missing something trivial since this is easily disabled for page/action/fragment caching with

config.action_controller.perform_caching = false

I have... ruby-1.9.2-rc2 > Rails.application.config.action_controller.perform_caching => false

What am I missing? Thanks Tony

2 solutions...

If you want caching on in test mode (good way to test it is doing what you expect) you can simply clear the cache between tests.

  def setup      Rails.cache.clear   end

Or you can write a cache that doesn't store anything.

put this in lib/active_support/cache/no_store.rb

module ActiveSupport   module Cache     class NoStore < Store       def read_entry(name, options)         return nil       end       def write_entry(name, value, options)       end       def delete_entry(name, options)       end     end   end end

then add config.cache_store = :no_store to your test.rb file.

You can also use the following in your environment configuration:

config.cache_store = :null_store

Cheers,

JP