Ruby on rails Rails.cache是否在测试之间被清除?

Ruby on rails Rails.cache是否在测试之间被清除?,ruby-on-rails,ruby,caching,rspec,Ruby On Rails,Ruby,Caching,Rspec,我们在Rails 3.2应用程序中使用Rails.cache缓存id/路径映射。在某些机器上,它工作正常,但在其他机器上,值是错误的。原因很难追踪,所以我对Rails.cache本身有一些疑问。它在测试之间被清除了吗?是否可能在测试模式中使用在开发模式中缓存的值?如果未清除,我如何在运行规范之前进行清除 我的缓存存储是配置为: #in: config/environments/development.rb config.cache_store = :memory_store, {:size =&

我们在Rails 3.2应用程序中使用
Rails.cache
缓存id/路径映射。在某些机器上,它工作正常,但在其他机器上,值是错误的。原因很难追踪,所以我对
Rails.cache
本身有一些疑问。它在测试之间被清除了吗?是否可能在测试模式中使用在开发模式中缓存的值?如果未清除,我如何在运行规范之前进行清除

我的缓存存储是配置为:

#in: config/environments/development.rb
config.cache_store = :memory_store, {:size => 64.megabytes}

#in: config/environments/production.rb
# config.cache_store = :mem_cache_store
加:

在运行每个等级库文件之前清除缓存

加:

在每个规范之前清除缓存

您可以将它放在
spec/spec\u helper.rb
中的
RSpec.configure
块中,使其全局应用(建议根据spec文件或案例将其分散)

默认情况下,RSpec不会自动清除该缓存。

更有效(更简单)的方法是将测试环境的缓存设置为使用NullStore:

# config/environments/test.rb:
config.cache_store = :null_store
NullStore确保不会缓存任何内容

例如,在下面的代码中,它将始终到达块并返回当前时间:

Rails.cache.fetch('time') { Time.now }

另请参阅Rails缓存指南:

有用于测试的
test
环境。我知道,但我只有这两个实体用于
config.cache\u store
。注意,这不会在运行之间清除缓存,只会在周围范围内的所有测试之间清除缓存。before(:each)可能是您想要的。将其更改为before:each怎么样?您为什么不在测试中禁用缓存?如果我们在测试中禁用缓存,我们如何测试缓存的响应本身?缓存验证,我相信,是编程中最难的部分之一,所以如果我们有缓存响应,我们应该测试它们。只是一个方面没有,(至少对于RSpec 3.8而言),要将其放入
spec/spec\u helper.rb
,您需要
config.before(:each)do blah end
而不是
before(:each)这样做的唯一问题是无法测试缓存。
# config/environments/test.rb:
config.cache_store = :null_store
Rails.cache.fetch('time') { Time.now }