我尝试使用多个变体来检查Capybara的200 Ok HTTP响应,但是没有它们不起作用:
response.should be_success
page.status.should be(200)
page.response.status.should == 200
还有另一个吗?
答案 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