🚀
ActiveSupport::Cache::RedisCacheStore利用時のMockRedisの扱い
概要
RailsのCacheStoreにActiveSupport::Cache::RedisCacheStoreを利用し、さらにMockRedisを利用してRedisをMockとして差し替え、特定の挙動(Rails.cache.state, Rails.cache.clear, etc)をすると、NoMethod Errorになる
undefined method `with' for #<MockRedis::Database:xx>
原因
ActiveSupport::Cache::RedisCacheStoreのコードを読むとわかるが、ConnectionPoolLikeというmoduleを::Redis、::Redis::Distributedにincludeしている。
差し替えたMockRedisにはModuleがincludeされておらず、with methodが無いのでErrorになる。
対応
同様にMockRedisにConnectionPoolLikeを実装しincludeすることで解決する。
::MockRedis.include(ActiveSupport::Cache::ConnectionPoolLike)
Discussion