RailsのRequest Spec


RailsのRSpecではRequestを受けた際の処理のテストを書くのに「Request Spec」を書くことが推奨されています。Controller Specと違い、ルータやミドルウェアスタック、Rackリクエストやレスポンスまで実行します。これによって、より現実に近い環境でテストを行うことができます。

🚜 テストで重要な観点

  • 受信したリクエストに対して適切なレスポンスを返す
  • Viewで使用するために必要なModelのオブジェクトを取得する
  • レスポンスを表示するのに適切なViewを選択する

🐝 新規データの作成シナリオのテスト

新規のwidgetページを開いて、必要な情報をPOSTしてwidgetを新規作成して表示するまでのテストです。

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 render_template(:new)
post '/widgets', widget: { name: 'My Widget'}
expect(response).to redirect_to(assigns(:widget))
follow_redirect!
expect(response).to render_template(:show)
expect(response.body).to include('Widget was successfully created.')
end
end

🐯 JSONのレスポンスのテスト

APIにアクセスして、JSONのレスポンスを受け取るテストです。

require 'rails_helper'
RSpec.describe 'Widget management', type: :request do
it 'creates a Widget' do
headers = {
'ACCEPT' => 'application/json', # This is what Rails 4 accepts
'HTTP_ACCEPT' => 'application/json' # This is what Rails 3 accepts
}
post '/widgets', { widget: { name: 'My Widget'} }, headers
expect(response.content_type).to eq('application/json')
expect(response).to have_http_status(:created)
end
end

🎉 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)