rails5からはcontrollerテスト書くぐらいなら、requestテストを書くのがいいっぽい
controllerテストいらねみたいな流れだったけど、requestテスト書けって話だったのか。
Rails 3 と 4 において、controller spec の assigns は慣用されてきました。 今回の RSpec 3.5 はマイナーリリースであり、私たちは SemVer に準拠する以上、 既存の controller spec を壊さないようにしています。 既存の Rails アプリケーションで assigns を多用しているものについては、 rails-controller-testing gem を Gemfile に追加することで assigns と assert_template を復活させることができます。 RSpec はこの gem とシームレスに連携するため、controller spec は問題なく動作し続けるはずです。
これから新しく作成する Rails アプリケーションについては、 rails-controller-testing gem を追加するのはおすすめしません。 Rails チームや RSpec コアチームとしては、代わりに request spec を書くことを推奨します。 Request spec は一つのコントローラーアクションにフォーカスしますが、 controller spec とは違い、ルーターやミドルウェアスタック、Rack リクエストやレスポンスも関与します。 これによって、より現実に近い環境でテストを実行し、controller spec で発生しがちな多くの問題を避けることができます。
今までもassings
を使用していたcontrolelrテストだと、下記を入れれば今まで通り使用できます。
これを使うぐらいなら、requestテストを書けって流れみたいだ。
なお、requestテストはcontrollerテストよりも早くなっているらしいので、早速試した。
Rails 5 では、request spec が Rails 4までの request spec や controller spec よりもかなり高速になっています。 これは Rails チームの Eileen Uchitelle1 のおかげです。
rails5のrequest
Finished in 0.33271 seconds (files took 5.43 seconds to load) 1 example, 0 failures
controller
Finished in 0.277 seconds (files took 11 seconds to load) 1 example, 0 failures
controllerの方がまだ早いかな・・・
流れ的には、requestテストの方がリアルなデータが取れるので、そっちを使えってことなので、今後はrequestテストを書いていく。