メインコンテンツまでスキップ

have_http_status マッチャー

have_http_status マッチャーは、レスポンスが所望のステータスコードを返すことを指定するために使用されます。次のいずれかの形式で1つの引数を受け入れます。

  • 数値コード
  • Rack::Utils::SYMBOL_TO_STATUS_CODE で定義されたステータス名
  • 一般的なステータスタイプ (:success, :missing, :redirect, :error)

このマッチャーは、どの response オブジェクトでも動作します。コントローラースペックリクエストスペック、およびフィーチャースペックで使用できます。

数値ステータスコードの確認

次の内容で "spec/controllers/application_controller_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe ApplicationController, type: :controller do

controller do
def index
render :json => {}, :status => 209
end
end

describe "GET #index" do
it "returns a 209 custom status code" do
get :index
expect(response).to have_http_status(209)
end
end

end

rspec spec を実行すると、

すべての例がパスするはずです。

シンボリックステータス名の確認

次の内容で "spec/controllers/application_controller_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe ApplicationController, type: :controller do

controller do
def index
render :json => {}, :status => :see_other
end
end

describe "GET #index" do
it "returns a :see_other status code" do
get :index
expect(response).to have_http_status(:see_other)
end
end

end

rspec spec を実行すると、

すべての例がパスするはずです。

シンボリックジェネリックステータスタイプの確認

次の内容で "spec/controllers/application_controller_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe ApplicationController, type: :controller do

controller do
def index
render :json => {}, :status => :bad_gateway
end
end

describe "GET #index" do
it "returns a some type of error status code" do
get :index
expect(response).to have_http_status(:error)
end
end

end

rspec spec を実行すると、

すべての例がパスするはずです。

コントローラースペックでの使用方法

次の内容で "spec/controllers/gadgets_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe GadgetsController, type: :controller do

describe "GET #index" do
it "returns a 200 OK status" do
get :index
expect(response).to have_http_status(:ok)
end
end

end

rspec spec/controllers/gadgets_spec.rb を実行すると、

すべての例がパスするはずです。

リクエストスペックでの使用方法

次の内容で "spec/requests/gadgets/widget_management_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe "Widget management", type: :request do

it "creates a Widget and redirects to the Widget's page" do
get "/widgets/new"
expect(response).to have_http_status(:ok)

post "/widgets", :params => { :widget => {:name => "My Widget"} }
expect(response).to have_http_status(302)

follow_redirect!

expect(response).to have_http_status(:success)
end

end

rspec spec/requests を実行すると、

すべての例がパスするはずです。

フィーチャースペックでの使用方法

次の内容で "spec/features/widget_management_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.feature "Widget management", type: :feature do

scenario "User creates a new widget" do
visit "/widgets/new"
expect(page).to have_http_status(200)

click_button "Create Widget"

expect(page).to have_http_status(:success)
end

end

rspec spec/features/widget_management_spec.rb を実行すると、

例がパスするはずです。