Capybara で 200 Ok HTTP 応答を確認するためにいくつかのバリアントを使用しようとしましたが、どれも機能しません。
response.should be_success
page.status.should be(200)
page.response.status.should == 200
もう一つありますか?
Capybara で 200 Ok HTTP 応答を確認するためにいくつかのバリアントを使用しようとしましたが、どれも機能しません。
response.should be_success
page.status.should be(200)
page.response.status.should == 200
もう一つありますか?
見つけた:
page.status_code.should be 200
そして、それはうまくいきます!!!
現在の RSpec バージョンでは非推奨の警告が発行されるため、ソリューションを次のように変更することをお勧めします。
expect(page.status_code).to be(200)
わたしにはできる。
PS非推奨の警告は次のとおりです。
非推奨:構文を明示的に有効にせずに
should
rspec-expectations の古い:should
構文を使用することは非推奨です。新しい:expect
構文を使用するか、:should
代わりに明示的に有効にしてください。
Selenium は厄介なことにヘッダーや HTTP ステータス データを提供しないため、このミドルウェアを作成して、Capybara で使用する HTTP ステータス コードを含む HTML コメントを挿入しました。
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