ari*_*kfr 7 memcached rspec ruby-on-rails rspec-rails
我们有一个Rails应用程序,我们用RSpec测试.我们想要规范依赖于Memcached的操作.这样做的最佳做法是什么?
我想通过将所有调用存根来实现这一点Rails.cache.这是一个好主意吗?
根据@Pan Thomakos的建议,我正在添加一些关于我正在尝试测试的场景的其他详细信息:
我们在系统中有帐户的概念,因此在每次请求时我们都会检索当前用户和当前帐户.因为系统中的帐户不多,所以我们将它们全部保存在缓存中并从那里检索它们.
def self.find_by_slug(slug)
Rails.cache.fetch(Account.cache_key_for_slug(slug), :expires_in => 1.day) { super }
end
Run Code Online (Sandbox Code Playgroud)
出于这个原因,在这种情况下缓存不仅是一个很好的行为,而是预期的行为和我想要测试的东西.因此,关闭缓存是行不通的.
测试时无需存根恕我直言!
该序列将如下所示:
就我个人而言,我相信如果您手头有资源,那么不应该使用存根。如果您手头没有资源(即第三方服务),则应该使用存根。
存根的问题在于,如果您更改了要存根的代码,那么您将不知道它是否会损坏。
这种情况下的一个例子是,如果您从标准 memcache gem 切换到 Dahli? 或其他一些 memcache gem,它们通过返回 false、null 或其他不同值来处理缓存未命中。我的意思是真的!Cache.set("my_key", false)! :)
切换的一个例子是离开 ASCII 协议并转向更快的二进制协议。
Memcache 是一种廉价资源,您可以使用 1 MB 内存来设置它来进行此测试。我什至可以说你可以对 mysql 做同样的事情。任何比 mysql 更大的东西,我都会开始倾向于存根,因为“设置”这些资源的成本变得很大。YMMV。
-丹尼尔
| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |