From fe6fe7b014898f684462a09b20f8fa902510e88d Mon Sep 17 00:00:00 2001 From: Dante Catalfamo Date: Fri, 28 Apr 2023 00:19:04 -0400 Subject: rails-test-cache: Add post --- content/posts/testing-rails-cache/index.org | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 content/posts/testing-rails-cache/index.org 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 -- cgit v1.2.3