是否在测试之间清除了Rails.cache?

时间:2012-11-09 13:36:06

标签: ruby-on-rails ruby caching rspec

我们在Rails 3.2应用程序中使用Rails.cache缓存id / path映射。在某些机器上它运行正常,但在其他机器上的值是错误的。原因很难跟踪,所以我对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

2 个答案:

答案 0 :(得分:64)

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

# config/environments/test.rb:
config.cache_store = :null_store

NullStore确保不会缓存任何内容。

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

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

另请参阅Rails缓存指南:http://guides.rubyonrails.org/caching_with_rails.html#activesupport-cache-nullstore

答案 1 :(得分:41)

添加:

before(:all) do
  Rails.cache.clear
end

在每个spec文件运行之前清除缓存。

添加:

before(:each) do
  Rails.cache.clear
end

在每个规范之前清除缓存。

您可以将此spec/spec_helper.rb放在RSpec.configure块中以使其全局应用(推荐使用每个spec文件或案例散布它)。

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