2012-11-09 28 views
35

我們在一個Rails 3.2應用程序中使用Rails.cache來緩存id /路徑映射。在某些機器上它工作正常,但在其他機器上,值是錯誤的。原因很難跟蹤,所以我有一些關於Rails.cache本身的問題。它在測試之間被清除了嗎?在測試模式下是否有可能使用開發模式緩存的值?如果它沒有清除,我怎麼能在運行規範之前做到這一點?是否在測試之間清除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 
+1

有'爲test'環境試驗。 – ck3g

+0

我知道,但是我只有'config.cache_store'這兩個條目。 – mrzasa

回答

32

地址:

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

有運行每個規格文件之前清除緩存。

地址:

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

有每個天賦之前清空緩存。

你可以把它放在RSpec.configure塊內的spec/spec_helper.rb之內,讓它在全局應用(建議在每個spec文件或案例中散佈它)。

RSpec默認不會自動清除緩存。

+14

請注意,這隻會在周圍範圍內的所有測試之間清除緩存之間的緩存。之前(:每個)可能是你想要的。 – Woahdae

+0

謝謝,但沒關係。錯誤的數據被緩存在該範圍之外。 – mrzasa

+2

如何將它更改爲之前:每個都做 – baash05

55

更有效(更容易)的方法是設置測試環境的緩存使用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

+27

唯一的問題是你無法測試緩存。 – baash05

相關問題