如何使用rSpec测试rails片段缓存?

时间:2012-02-19 04:57:02

标签: ruby-on-rails caching rspec

我正在广泛地使用片段缓存,并且遇到了一些问题,其中意外的对象被捕获在缓存中和/或片段没有像最初计划的那样到期。

我认为这将成为请求规范的主要候选者,但我不确定:

  1. 需要做些什么才能模拟高效触发缓存的场景。
  2. 在测试环境中需要进行哪些调整才能进行缓存。
  3. 缓存是否会持续存在多个规范,或者rspec会自动丢弃每个规范之间的缓存吗?
  4. 最重要的是,是否有一种方法可以确定缓存是否实际提供?

1 个答案:

答案 0 :(得分:2)

  1. 在同一测试用例中发出两个请求将是最现实的方式。
  2. 您需要在测试环境中启用缓存,默认情况下,它仅在生产环境中启用。理想情况下,并非每个测试套件都需要启用缓存,因此您需要在套件之前/之后打开/关闭它。请参阅此问题:Optionally testing caching in Rails 3 functional tests
  3. 这取决于你的存储层的缓存片段,但Rails.cache.clear应该足够聪明。我认为在任何情况下你都不希望缓存能够持续存在,因为污染会使事情变得混乱。
  4. 如果您的片段进行数据库调用,则在测试中存根数据库连接,第一次返回假结果,第二次引发异常。这可以推广到其他慢速调用(例如网络请求)。