summaryrefslogtreecommitdiffstats
path: root/content/posts
diff options
context:
space:
mode:
Diffstat (limited to 'content/posts')
-rw-r--r--content/posts/testing-rails-cache/index.org33
1 files changed, 33 insertions, 0 deletions
diff --git a/content/posts/testing-rails-cache/index.org b/content/posts/testing-rails-cache/index.org
new file mode 100644
index 0000000..266a900
--- /dev/null
+++ b/content/posts/testing-rails-cache/index.org
@@ -0,0 +1,33 @@
+#+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
+=ActiveSupport::Cache::NullStore= which will always succeed but it
+doesn't actually store or return anything.
+
+There's an almost completely undocumented function called
+=with_local_cache= that gets implemented on =NullStore= that lets
+you run a block with a =MemoryStore= instead of a =NullStore=. This
+happens because it =prepends= the
+=ActiveSupport::Cache::Strategy::LocalCache= class.
+
+#+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