我们在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
答案 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不会自动清除该缓存。