読者です 読者をやめる 読者になる 読者になる

woshidan's blog

そんなことよりコードにダイブ。

RailsのコントローラやビューのテストをMinitestでやる

Ruby on Rails

既にある気がするのだけど、RailsのテストをMinitestでやっていて、
モデルのユニットテストはまだし、コントローラとかビューとかをテストするときどうするのかな、と思ったので、

これらのテストのときに使うメソッドを自分用にメモする。

 

ここに書いてないことは

Rails4で書いたアプリのコードをMiniTest::Specでテストする - yo_waka's blog

や、

Rails4時代のテストの書き方。 | The intersection

あたりやるびまを見てます。

 

正直な話、経験が浅い身としては

コントローラの特定のアクションで使用しているインスタンス変数やテンプレートの種類が直接叩きやすい、

以外はグーグルで引っかかる件数が多いので、Rspecがいいと思う日もなくはないです。

 

お品書き

  • 特定のコントローラのアクションを飛ばす
  • アクションへのリクエストにパラメータをつける
  • コントローラ編
    • インスタンス変数を見る
    • ダウンロードさせるファイルのファイル名を見る
    • JSONを投げた場合のテスト
  • ビュー編

 

特定のコントローラのアクションを飛ばす

テストしたいコントローラのテストファイルを作成して、その中でリクエストのメソッド,アクション名でアクションに対してリクエストを出します。

リクエストの結果は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