はじめに
テストコードの実装②をみていない方はこちらからご覧ください。
#コントローラの単体テスト
今回はコントローラの単体テストについてまとめていきます。コントローラのテストでは、あるアクションにリクエストを送ったとき、想定通りのレスポンスが生成されるかどうかを確かめることが主な役割です。RSpecの中でもRequest Specと呼ばれる手法を利用します。
なお、コントローラーのテストコードは、結合テストコードに記述する内容と、同じような責務を果たすことが多いです。よって、今回は簡単にまとめるのみといたします。
###Request Spec(参考)
RSpecが提供している、コントローラーのテストコードを書くために特化した手法です。RSpecの導入が完了していれば使用できます。
##テストコードの具体的な実装
まずはファイルの生成をします。
rails g rspec:request tweets
次に生成されたファイルに以下のようにテスト項目を入力してください。(テスト項目は完璧ではありません、あくまで一例です)
なお今回、すでにある投稿に対してテストを行いたいので、buildではなく createを使用しています。
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
一つづつ見ていきます。
###get
get tweet_pathのように、どこのパスにリクエストを送るかを記述します。
###response
リクエストに対するレスポンスのこと。
このレスポンスで取得できる情報に、想定する内容が含まれているかを確認することで、テストコードを書くことができます。
###response.status
そのレスポンスのHTTPステータスコードを出力できます。
###response.body
response.bodyと記述すると、ブラウザに表示されるHTMLの情報を抜き出すことができます。
コントローラの単体テストでは、リクエストに対して、どんなレスポンスをするかの確認をしていることを意識しながら見るとわかりやすいのではないでしょうか
#おわりに
お疲れ様です。
今回はかなり簡潔にコントローラの単体手薄とについてまとめましたので、「え、これだけ?」と不安になる方もいるでしょう。しかし心配無用です!!
先に書いた通り、結合テストでしっかり確認していくので問題はありません!!!!
次回をぜひ楽しみにしていてください!
つづき
Rspecでテストコードの実装④