RailsのコントローラやビューのテストをMinitestでやる
既にある気がするのだけど、RailsのテストをMinitestでやっていて、
モデルのユニットテストはまだし、コントローラとかビューとかをテストするときどうするのかな、と思ったので、
これらのテストのときに使うメソッドを自分用にメモする。
ここに書いてないことは
Rails4で書いたアプリのコードをMiniTest::Specでテストする - yo_waka's blog
や、
Rails4時代のテストの書き方。 | The intersection
あたりやるびまを見てます。
正直な話、経験が浅い身としては
コントローラの特定のアクションで使用しているインスタンス変数やテンプレートの種類が直接叩きやすい、
以外はグーグルで引っかかる件数が多いので、Rspecがいいと思う日もなくはないです。
お品書き
- 特定のコントローラのアクションを飛ばす
- アクションへのリクエストにパラメータをつける
- コントローラ編
- ビュー編
- 文字コードを見る
- HTMLの中身を見る
特定のコントローラのアクションを飛ばす
テストしたいコントローラのテストファイルを作成して、その中でリクエストのメソッド,アクション名でアクションに対してリクエストを出します。
リクエストの結果はresponseで受け取ることができます
app/controllers/foo_controller.rb
app/views/foo/index.html.erb
config/routes.rb
test/controllers/foo_controller_test.rb
アクションへのリクエストにパラメータをつける
のようなかんじ。
get 'users/:user_id/albums/:album_id' => 'albums#show'
のようなややこしいURLに対応しているアクションにリクエストを飛ばすときも不安になるのだけど、
上の場合はAlbumsControllerのテストの中で対応するパラメータをつけてあげればよいです。
(あ、そもそもこんなURLになるような設計するなよと言われたらそうですが)
コントローラ編
インスタンス変数を見る
getやpostでHTTPリクエストを飛ばしたあと、assginsでインスタンス変数の一覧をハッシュ形式で受け取ることができます。
app/controllers/foo_controller.rb
test/controllers/foo_controller_test.rb
ダウンロードさせるファイルのファイル名を見る
send_dataの場合。
response.header["Content-Disposition"]にファイルに関する内容が入っています。
app/controllers/foo_controller.rb
config.routes.rb
test/controllers/foo_controller_test.rb
JSONを投げた場合のテスト
app/controllers/foo_controller.rb
test/controllers/foo_controller_test.rb
ビュー編
文字コードを見る
response.charsetを使うと表示するページの文字コードが見れます。
HTMLの中身を見る
app/controllers/foo_controller.rb
app/views/foo/index.html.erb
config/routes.rb
test/controllers/foo_controller_test.rb