与Capybara的HTTP响应200

时间:2013-01-31 18:50:06

标签: capybara

我尝试使用多个变体来检查Capybara的200 Ok HTTP响应,但是没有它们不起作用:

response.should be_success
page.status.should be(200)
page.response.status.should == 200

还有另一个吗?

5 个答案:

答案 0 :(得分:13)

我找到了它:

page.status_code.should be 200

它工作得很好!!!

答案 1 :(得分:8)

由于当前RSpec版本发出弃用警告,我建议将您的解决方案更改为:

expect(page.status_code).to be(200)

它对我有用。

P.S。弃用警告如下:

  

弃用:使用来自rspec-expected'的should旧的:should   不支持显式启用语法的语法。使用   新的:expect语法或明确启用:should

答案 2 :(得分:3)

答案和提问者都没有说出他们使用的是哪个驱动程序。它是一个重要的信息,这就产生了不同。只是为了提供完整的信息,这个不适用于selenium webdriver ,尽管可以使用poltergeist和capybara-webkit 驱动程序

答案 3 :(得分:0)

Selenium恼人地不提供任何标头或HTTP状态数据,所以我编写了这个中间件来注入一个HTML注释,其中包含用于Capybara的HTTP状态代码。

module Vydia
  module Middleware
    class InjectHeadersForSelenium

      def initialize(app)
        @app = app
      end

      def call(env)
        @status, @headers, @response = @app.call(env)

        if @headers["Content-Type"] && @headers["Content-Type"].include?("text/html")
          @prepend = "<!-- X-Status-Code=#{@status} -->\n"
          @headers = @headers.merge(
            "Content-Length" => (@headers["Content-Length"].to_i + @prepend.size).to_s
          )
        end

        [@status, @headers, self]
      end

      def each(&block)
        if @prepend
          yield(@prepend)
          @prepend = nil
        end

        @response.each(&block)
      end

    end
  end
end

在测试中,您可以获得如下代码的状态:

def get_http_status
  begin
    page.driver.status_code
  rescue Capybara::NotSupportedByDriverError
    matches = /<!-- X-Status-Code=(\d{3}) -->/.match(page.body)
    matches && matches[1] && matches[1].to_i
  end
end

get_http_status

答案 4 :(得分:0)

作为另一种方法,您可以使用Ruby的Http客户端API来检查响应代码或键入

一种方法:

response = Net::HTTP.get_response(URI.parse(current_url))

expect(response.kind_of? Net::HTTPSuccess).to be_truthy

第二种方式:

response = Net::HTTP.get_response(URI.parse(current_url))

expect(response.code.to_i.eql?(200)).to be_truthy #response.code returns the code as a string

PS:您无需下载Ruby库随附的任何外部gem