2016-11-28 19 views
15

私はレールAPIに取り組んでいます。私は現在、コントローラ用のRSpecテストを書く予定です。 私は周りを読んできましたが、コントローラスペックとリクエストスペックの実際の違いは何か、そして私がAPIをテストしている場合はどちらを使うべきかを理解できませんでした。コントローラの仕様と仕様の仕様

+2

私があなただったら、コントローラの仕様に要求/統合仕様を賛成できません。 –

答えて

7

コントローラ仕様 - コントローラ仕様は、Rails機能テスト用のRSpecラッパーです。それはあなたがそれぞれの例では、単一のHTTPリクエストをシミュレートすることができ、その後、 期待される成果を指定

要求スペック - 要求スペックRailsの統合テストの周りに薄いラッパーを提供し、フルを通じて行動を駆動するように を設計されていますスタック(ルーティング (Railsによって提供される)を含む)とスタブなし(これはあなた次第です)。

APIコントローラをテストする場合は、単一のリクエストをテストするときにController specsを使用することをお勧めします。アーロン・サムナー引用

+3

古いバージョンのRailsを使用している場合、一般的に推奨されるコードスタイルはコントローラ仕様に近いようです。 Rails 5ではコントローラテストの動作が変更されました。それらは統合テストであり、もはやコントローラの内部にアクセスすることはできません。 コントローラーテストを行うことに全く問題がないかどうかは現在わかりません。要求とフィーチャの仕様は、今後の開発に推奨されるアプローチのようです。 https://everydayrails.com/2016/09/05/replace-rspec-controller-testshtml – CJBrew

+0

httpレイヤーを使用せずにアクションを直接呼び出すだけでテストコントローラをユニット化するかどうかについては問題があります。これはお勧めですか? – Jwan622

4

RailsとRSpecのチームの両方が直接モデル(単位)のテストの 賛成で、(また、機能テスト層として知られている)あなたの アプリのコントローラテストを交換または削除を提案します、または上位レベルの 統合テストを使用します。

新しいAPIの場合、私は要求仕様を使用し、コントローラテストを使用するよりも私の "エンドポイント"(モデルとビジネスロジックとも呼ばれます)をヒットすることを好みます。

3

確かに、Rspecチームは公式にコントローラーの仕様を今すぐ避けています。新しいRailsのアプリの

http://rspec.info/blog/2016/07/rspec-3-5-has-been-released/

:私たちはあなたのアプリケーションに レールコントローラテストの宝石を追加することはお勧めしません。公式の のRailsチームとRSpecコアチームの推奨は、代わりに 要求仕様書を書くことです。要求仕様では、コントローラの動作を1つの コントローラに集中させることができますが、コントローラのテストとは異なり、ルータ、 ミドルウェアスタック、およびラックの要求と応答の両方が含まれます。これにより、書いているテストに 現実感が追加され、コントローラの仕様に共通する多くの 問題を回避できます。 Rails 5の要求仕様 は、レール CommitterチームのEileen Uchitelle1による作業のおかげで、要求仕様またはコントローラ仕様のいずれよりもかなり速く、 のレール4でした。