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

rails5からはcontrollerテスト書くぐらいなら、requestテストを書くのがいいっぽい

rails

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 で発生しがちな多くの問題を避けることができます。

RSpec 3.5 がリリースされました!

今までもassingsを使用していたcontrolelrテストだと、下記を入れれば今まで通り使用できます。

GitHub - rails/rails-controller-testing: Brings back `assigns` and `assert_template` to your Rails tests

これを使うぐらいなら、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テストを書いていく。