11

Capybara で 200 Ok HTTP 応答を確認するためにいくつかのバリアントを使用しようとしましたが、どれも機能しません。

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

もう一つありますか?

4

5 に答える 5

14

見つけた:

page.status_code.should be 200

そして、それはうまくいきます!!!

于 2013-02-03T11:16:15.583 に答える
10

現在の RSpec バージョンでは非推奨の警告が発行されるため、ソリューションを次のように変更することをお勧めします。

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

わたしにはできる。

PS非推奨の警告は次のとおりです。

非推奨:構文を明示的に有効にせずにshouldrspec-expectations の古い:should 構文を使用することは非推奨です。新しい:expect構文を使用するか、:should代わりに明示的に有効にしてください。

于 2014-11-21T16:10:22.007 に答える
0

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
于 2017-11-21T17:00:51.090 に答える