Rails テストについて 5 (コントローラー編)


はじめに

テストに拒否反応があるので、まずは整理したいと思います。
整理していくにつれ、拒否反応がなくなってきたかも・・・

少しづつ記事を書いていきます。
Rails テストについて 1
Rails テストについて 2
Rails テストについて 3
Rails テストについて 4
もうすでにご存知の方、省略の仕方等ご存知でしたら、ご助言願います。

コントローラーテストで確認したいこと

  • アクション内で定義するインスタンス変数の値が期待したものになるかを確認する
  • アクションが呼ばれたあと、期待したビューが表示されるかを確認する

コントローラーテストのコードの書き方

  • コントローラー内のメソッドで、あるアクションが呼ばれた際の挙動をチェック
  • 1つのアクションにつき、先ほどの確認したいことの2つを確認する。

1. アクション内で定義するインスタンス変数の値が期待したものになるかを確認する
2. アクションが呼ばれたあと、期待したビューが表示されるかを確認する

ひとつのアクションに対して2つ以上のexample(it '' do ~ end)が必要となる。

spec/controllers/◯◯_controller_spec.rb
describe ◯◯Controller do
  describe 'HTTPメソッド名 #アクション名' do
    it "インスタンス変数は期待した値?" do
  "擬似的にリクエストを行ったことにするコードを書く"
      "エクスペクテーションを書く"
    end

    it "期待するビューに遷移できる?" do
      "擬似的にリクエストを行ったことにするコードを書く"
      "エクスペクテーションを書く"
    end
  end

コントローラーテストのコードの書き方に関する注意

  • 各アクションはそれぞれリクエストされる際のhttpメソッドが違う
    • よって、それぞれ少しずつテストの書き方が異なる。

以下、Railsに定められている7つのアクションのうちhttpメソッドがgetであるアクションに関してのテストコードの書き方となります。
他アクションに関しては、随時追記していきます。

コントローラーテストの準備

Gemfileに追記

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'rspec-rails'
  gem 'factory_bot_rails'
  gem 'rails-controller-testing'  ← 追記
end

そして、bundle install !!

Specファイルを作成(コントローラー用)

① specディレクトリ以下にcontrollersディレクトリを作成する。
② ①内に◯◯_controller_spec.rbを作成する。

  • 今回は、groups_controller.rbのテストを行います。
  • ということで、groups_controller_spec.rbを作成しました。
  • 緑色になっているところです。

基本コードの記入

作成した◯◯_controller_spec.rbに以下コードを記入する。

◯◯_controller_spec.rb
require 'rails_helper'

describe ◯◯Controller do

end

groupsの場合

groups_controller_spec.rb
require 'rails_helper'

describe GroupsController do

end

テスト実行できるか確認

ターミナル

% bundle exec rspec spec

上記コマンドでも問題ないが、特定したテストファイルのみ実行することができる。

ターミナル

% bundle exec rspec spec/controllers/◯◯_controller_spec.rb

と出力されれば準備おkです! 今回はここまで!

テスト編、続きます!

(httpメソッドがgetで呼ばれるアクションのコントローラーテストに入っていきます!)

さいごに

日々勉強中ですので、随時更新します。
皆様の復習にご活用頂けますと幸いです。