#+TITLE: Testing Rails Components That Require Cache #+DATE: 2023-04-28T00:14:14-04:00 #+DRAFT: false #+DESCRIPTION: How to test rails components that require cache without caching everything #+TAGS[]: ruby rails cache #+KEYWORDS[]: ruby rails cache #+SLUG: #+SUMMARY: If you're in the default testing environment your rails cache is [[https://api.rubyonrails.org/classes/ActiveSupport/Cache/NullStore.html][=ActiveSupport::Cache::NullStore=]] which will always succeed but it doesn't actually store or return anything. There's an almost completely undocumented method called =with_local_cache= on =NullStore= that lets you run a block with a =MemoryStore= instead of a =NullStore= for the duration of the block. This happens because it =prepends= the [[https://api.rubyonrails.org/classes/ActiveSupport/Cache/Strategy/LocalCache.html][=ActiveSupport::Cache::Strategy::LocalCache=]] class. This lets you test one or two things that require caching without enabling it on all tests and slowing everything down. #+begin_src ruby Rails.cache.class.name # => "ActiveSupport::Cache::NullStore" Rails.cache.write("a", 3) # => true Rails.cache.read("a") # => nil Rails.cache.with_local_cache do Rails.cache.write("a", 5) p Rails.cache.read("a") end 5 # => 5 #+end_src