はじめに
①🔰【初学者用】RSpecでテストコードを書こう!【概念・準備】
②🔰【初学者用】RSpecでテストコードを書こう!②【簡単な実装例】
今日の投稿は③になります!
前回はモデルの単体テストを行ったので今回はコントローラーの単体テストです。
コントローラーの単体テストはどんなテスト?
モデルのテストでは、インスタンスを生成し、それがモデルに規定した通りの挙動になるか(バリデーションが正しく働くかなど)を確かめます。
コントローラーのテストでは、あるアクションにリクエストを送ったとき、想定通りのレスポンスが生成されるかどうかを確かめます。
Request Spec
RSpecの導入が完了していれば使用できる、コントローラーのテストコードを書くために特化した手法のこと。
テストコードの具体的実装
まずはファイルを生成します!今回は簡単なツイートアプリを作っている想定です!
rails g rspec:request tweets
実行後はrequest
ディレクトリに、tweets_spec.rb
が生成されます。
続いてテストコードを記述していきます。
require 'rails_helper'
describe TweetsController, type: :request do
before do
@tweet = FactoryBot.create(:tweet)
end
describe 'GET #index' do
it 'indexアクションにリクエストすると正常にレスポンスが返ってくる' do
get tweet_path(@tweet)
expect(response.status).to eq 200
end
it 'indexアクションにリクエストするとレスポンスに投稿済みのツイートのテキストが存在する' do
get tweet_path(@tweet)
expect(response.body).to include(@tweet.text)
end
#一部省略
end
end
前回同様1つづつ説明していきますね!
create
ActiveRecordのcreateメソッド
と同じです!
build
とほぼ同じ働きをしますが、createの場合はテスト用のDBに値が保存されます。
※テスト後にはテスト用に保存された値が削除されます。
get
get 〇〇_path
のように、どこのパスにリクエストを送りたいかを記述します。
ターミナルでrails routes
を実行して確認します。
response.status
response.status
と実行することによって、そのレスポンスのHTTPステータスコード
を出力できます。
HTTPステータスコードは以下に記述します。
response.body
response.body
と記述すると、ブラウザに表示されるHTMLの情報を抜き出すことができます。
200とは?(HTTPステータスコード)
記述内に200とありますがこれは一体なんの数字でしょうか?
実はこれ、HTTPステータスコードと言って通信の処理がどのような結果になったかを表す数字です。
以下に主なステータスコードをまとめておきます。
ステータスコード | 結果 |
---|---|
100〜 | 処理の継続中 |
200〜 | 処理の成功 |
300〜 | リダイレクト |
400〜 | クライアントエラー |
500〜 | サーバーのエラー |
ここまでの記述が理解できたらテストコードを実行しましょう!
bundle exec rspec spec/requests/tweets_spec.rb
response.body
ではそのページでしか返ってこないレスポンスをテストするようにしてます!
例えば投稿を検索するためのページがあったとしてそこには検索フォームがあるはずです。検索ページをテストする際はその検索フォームがあるかどうかでテストするというイメージです。
終わりに
なんとなく流れはつかめましたか?
モデルの単体テストコードに比べたらボリュームにかけますが、次の結合テストがボリューミーなので、お楽しみに!笑