Rails.cache是​​否在testing之间被清除?

我们在Rails 3.2应用程序中使用Rails.cache来cachingid /path映射。 在一些机器上,它工作正常,但其他值是错误的。 原因很难跟踪,所以我有一些关于Rails.cache本身的问题。 它在testing之间被清除了吗? 在testing模式下是否有可能使用开发模式caching的值? 如果没有清除,我怎么能在运行规格之前呢?

我的caching存储configuration是:

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

更高效(更简单)的方法是将testing环境的caching设置为使用NullStore:

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

NullStore确保什么都不会被caching。

例如在下面的代码中,它会一直跳到代码块并返回当前时间:

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

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

加:

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

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

加:

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

在每个规范之前清除caching。

你可以把它放在RSpec.configure模块的spec/spec_helper.rb中, RSpec.configure在全局范围内使用(build议在每个spec文件或案例中散布它)。

RSpec默认不会自动清除caching。