加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用RSpec进行Rails片段缓存测试

发布时间:2020-12-16 19:13:47 所属栏目:百科 来源:网络整理
导读:我觉得这是一个没有太多记录的主题,至少我在这里找到我们关于最佳实践的方法很困难. 我使用cache_key在视图中分段缓存: %tbody - @employees.each do |employee| - cache employee do %tr[employee] %td= employee.name %td= employee.current_positions %t
我觉得这是一个没有太多记录的主题,至少我在这里找到我们关于最佳实践的方法很困难.

我使用cache_key在视图中分段缓存:

%tbody
  - @employees.each do |employee|
    - cache employee do
      %tr[employee]
        %td= employee.name
        %td= employee.current_positions
        %td= employee.home_base
        %td= employee.job_classes

现在我可以添加:touch =>在我的has_many关联的:belongs_to一侧是真的,这将完成我需要的所有东西,以保持这个片段缓存最新,但对于我的生活,我很难弄清楚如何测试这个.

放入:touch => true很简单方便,但它将到期逻辑分散到几个地方.我希望有一个RSpec请求规范,它会遍历并检查此行为,这些内容不会发生太大变化,但可以将所有缓存需求放入一个描述应该发生的内容的特定文件中.

我尝试过这些方法:

require 'spec_helper'
include AuthenticationMacros

describe "Employee index caching" do

  before do
    Rails.cache.clear
    ActionController::Base.perform_caching = true
    login_confirmed_employee
  end

  after do
    ActionController::Base.perform_caching = false
  end

  specify "the employee cache is cleared when position assignments are modified"
  specify "the employee cache is cleared when home base assignments are modified"
end

这些规格充实了Capybara的步骤,当然正在进行更新,而且我认为自己走在了正确的轨道上.但是测试以奇怪的方式闪烁.我会修改规范以输出员工对象cache_key,有时cache_keys会改变,有时候不会改变,有时规格会通过,有时候不会.

这甚至是一个好方法吗?

我知道SO想要回答的问题,所以要开始:当我的测试环境默认没有缓存时,如何设置和拆除此测试以使用缓存?但是,一般情况下,如果您取得了成功,我真的很想听听您如何在应用中成功测试片段缓存.

编辑

我接受了cailinanne的答案,因为它解决了我特别提出的问题,但我已经决定,如果你能摆脱它,我甚至不推荐集成测试缓存.

我没有在关联声明中指定触摸,而是创建了一个特定于我的缓存需求的观察器,它直接触及模型,并且正在单独测试它.

我建议如果单独测试一个多模型观察者,还要包括一个检查观察者observe_models的测试,否则你可能会过多地暴露现实.

引导我的具体答案是:https://stackoverflow.com/a/33869/717365

解决方法

首先我要说的是,在这个答案中,你可能会得到更多的同情.我一直在努力解决这些问题.虽然我能够获得特定测试的可重复结果,但我发现结果根据我是否运行一个与多个规格,以及是否在spork之内而变化.叹.

最后,如果我在test.rb文件中启用了缓存,我发现99.9%的问题都消失了.这可能听起来很奇怪,但经过一番思考后,我的应用程序“正确”.我的绝大多数测试都不在视图/请求层,对于少数测试,在用户查看的相同配置下测试是否有意义?

当我正在努力解决这个问题时,我写了一个blog post,其中包含一些用于测试缓存的有用测试助手.您可能会发现它很有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读