Rspecを使用してコントローラのテストコードを書く!
コントローラのテスト編(rspec)
・正しいビューに遷移するかのテスト
example内に
#アクションを動かすリクエストを送る。
#パラメーターを送ることもできる。
(httpメソッド :アクション名)(id: 変数もしくは数字)
#responseでテストされる側の遷移先のビューの情報を持つ
#render_templateで本来であれば遷移する先の情報を持つ
(expect(response).to render_template :アクション名)
・インスタンス変数のテスト(インスタンス変数 = モデル名.find(params[:id])の場合)
※assignsメソッド(アクションで定義しているインスタンス変数を取得するメソッド)
#params[:id]に入れるデータを作成
(変数名① = create(データ))
#データをリクエストと一緒に送る。
(httpメソッド :アクション名)(id: 変数①)
#assignsでテストされる側のインスタンス変数を@抜きで取る
(expect(assigns(:変数名)).to eq 変数①)
・配列のインスタンス変数のテスト
※create_listメソッド(factory_girlの設定ファイルに存在しているリソースを複数作成したい場合に使用。第一引数にシンボル型でリソースを、第二引数に複製したい数を記述)
※matchマッチャ(引数に配列クラスのインスタンスを取り、expectの引数と比較する)
#変数に配列を代入する
(変数① = create_list(:リソース名, 複製したい数))
#アクションを動かすリクエストを送る。
(httpメソッド :配列クラスのインスタンスがあるアクション)
(expect(assigns(:配列クラスのインスタンス)).to match(変数①))
#配列の順番もテストしたいならsortメソッドとgemのFakerを使用する。
#sortメソッドの降順はsort( |a,b| b <=> a)と記述する。
(expect(assigns(:配列クラスのインスタンス)).to match(変数①.sort( |a,b| b <=> a)))
このままだと一番最初に同じリソースを複製しているためsortできない。この時にFakerが役に立つ。Fakerについてはまた後日よく調べてアウトプットしたいと思います。