🚀
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