48

Rails.cache我们在 Rails 3.2 应用程序中使用缓存 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
4

2 回答 2

70

一种更有效(也更容易)的方法是将测试环境的缓存设置为使用 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

于 2014-01-29T07:02:37.990 回答
58

添加:

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

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

添加:

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

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

您可以将其放在块spec/spec_helper.rbRSpec.configure以使其全局应用(建议在每个规范文件或案例中分散它)。

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

于 2012-11-09T14:19:22.857 回答