neokaeruの日記

職業はプログラマーをしています。プログラミングや趣味についての記事を書いていこうと思います。よろおおおお!

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についてはまた後日よく調べてアウトプットしたいと思います。