【问题标题】:I want to verify there are no broken links on the page using Capybara and rspec我想使用 Capybara 和 rspec 验证页面上没有损坏的链接
【发布时间】:2020-12-22 13:26:26
【问题描述】:

我正在使用下面的代码来验证使用 RSpec 和 capybara 的页面上没有损坏的链接。

然后("我希望主页上的链接不会损坏") 做

allinks = page.all('a')
allinks.each do |link|
  get link[:href]
  expect(page.status_code).to eq(200)
end

我对第 1 行的代码感到困惑。 4和5。我正在尝试使用机架测试方法“get”来检查链接而不重定向到链接。 即使响应代码从 200 更改为 400,代码也不会抛出任何错误并通过。

【问题讨论】:

    标签: rspec capybara broken-links


    【解决方案1】:

    我不确定当你这样做时 Capybara 会发生什么(我已经很久没有使用它了) 我怀疑page 是您当前“进入”的页面,可能已经记住了。

    我建议您尝试使用单独获取 URL,例如 httparty

    response = HTTParty.get(link[:href])
    expect(response.code).to eq(200)
    

    相对 href 属性可能存在问题,例如

    <a href="/home">I skipped domain</a>
    

    但这超出了这个问题的范围。

    【讨论】:

      【解决方案2】:

      您是否正在尝试检查您的所有页面是否都没有损坏,即它们是否从 GET 请求中以正确的状态代码 (200) 进行响应?

      我为此编写了这个测试。您几乎可以将它复制粘贴到任何 Rails 5 应用程序中。

      
      describe Rails.application.routes do
        describe '#get', type: :request do
          # This gets rails routes
          let(:routes_info) { described_class.routes }
          # this select GET routes
          let(:routes_get) { routes_info.select { |r| r.verb == 'GET' } }
          let!(:user) { create(:user) }
      
          specify 'GET routes returns 200, 301 or 302 code' do
            routes_get.each do |route|
              # parsing routes to a correct uri format
              route = route.path.spec.to_s.gsub(/\(.:format\)*$/, '')
      
              # route_with_params will replace ':security_token' with a test security token
              get route_with_params(route, user)
              expect(response.status).to eq(200).or eq(301).or eq(302)
            end
          end
      
          def route_with_params(route, user)
            route.gsub!(':security_token', user.security_token)
          end
        end
      end
      
      

      这里增加的复杂性是某些 GET 页面需要用户安全令牌,因此我必须为测试创建一个。

      【讨论】:

      • 谢谢,但我没有在我的项目中使用 rails 应用程序,所以我不确定这是否仍然有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 2011-04-27
      相关资源
      最近更新 更多