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

😸 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍