LoginSignup
2
1

More than 1 year has passed since last update.

[Rails] Rspecでテストコードの実装③

Last updated at Posted at 2021-05-03

はじめに

テストコードの実装②をみていない方はこちらからご覧ください。

コントローラの単体テスト

今回はコントローラの単体テストについてまとめていきます。コントローラのテストでは、あるアクションにリクエストを送ったとき、想定通りのレスポンスが生成されるかどうかを確かめることが主な役割です。RSpecの中でもRequest Specと呼ばれる手法を利用します。
なお、コントローラーのテストコードは、結合テストコードに記述する内容と、同じような責務を果たすことが多いです。よって、今回は簡単にまとめるのみといたします。

Request Spec(参考)

RSpecが提供している、コントローラーのテストコードを書くために特化した手法です。RSpecの導入が完了していれば使用できます。

テストコードの具体的な実装

まずはファイルの生成をします。

rails g rspec:request tweets

次に生成されたファイルに以下のようにテスト項目を入力してください。(テスト項目は完璧ではありません、あくまで一例です)
なお今回、すでにある投稿に対してテストを行いたいので、buildではなく createを使用しています。

spec/requests/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

一つづつ見ていきます。

get

get tweet_pathのように、どこのパスにリクエストを送るかを記述します。

response

リクエストに対するレスポンスのこと。
このレスポンスで取得できる情報に、想定する内容が含まれているかを確認することで、テストコードを書くことができます。

response.status

そのレスポンスのHTTPステータスコードを出力できます。

response.body

response.bodyと記述すると、ブラウザに表示されるHTMLの情報を抜き出すことができます。



コントローラの単体テストでは、リクエストに対して、どんなレスポンスをするかの確認をしていることを意識しながら見るとわかりやすいのではないでしょうか

おわりに

お疲れ様です。
今回はかなり簡潔にコントローラの単体手薄とについてまとめましたので、「え、これだけ?」と不安になる方もいるでしょう。しかし心配無用です!!
先に書いた通り、結合テストでしっかり確認していくので問題はありません!!!!
次回をぜひ楽しみにしていてください!

つづき
Rspecでテストコードの実装④

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1