【问题标题】:How can I test rails fragment cacheing with rSpec?如何使用 rSpec 测试 Rails 片段缓存?
【发布时间】:2012-03-09 22:50:04
【问题描述】:

我非常广泛地使用片段缓存并且遇到了一些问题,其中意外对象被捕获在缓存中和/或片段没有按原计划过期。

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

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

【问题讨论】:

  • 你能澄清一下(1)吗?发出 GET 请求不是真实的模拟吗?
  • @bdon 我想我要问的是 - 我是否需要为每个“缓存规范”触发至少 2 个获取请求一次缓存它,一次验证?或者有没有更有效的方法?可能没有,但我想知道是否有。
  • 即使有另一种方法来加热缓存,似乎触发两个请求将是最现实的。单个请求不应给您的测试套件增加太多开销。
  • a similar question,我添加了an example我如何使用rspec视图规范来测试rails视图中的缓存过期

标签: ruby-on-rails caching rspec


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

【讨论】:

  • 感谢您的详尽回复!
猜你喜欢
  • 2012-01-18
  • 1970-01-01
  • 2013-05-04
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
相关资源
最近更新 更多