web-dev-qa-db-ja.com

コントローラの仕様とリクエストの仕様

私はRails APIに取り組んでおり、現在、コントローラー用のRSpecテストを書くことを計画しています。コントローラの仕様とリクエストの仕様の実際の違いは次のとおりです。APIをテストする場合は、おそらくどちらを使用する必要があります。

30
jsanch16

Rails 3および4

Controller specs-Controller specは、Rails機能テストのRSpecラッパーです。単一のシミュレーションを可能にします各例のhttpリクエスト、および予想される結果の指定

リクエスト仕様-リクエスト仕様は、Railsの統合テストの薄いラッパーを提供し、ルーティング(Railsが提供する)を含むスタック全体の動作を駆動するように設計されています)スタブなし(それはあなた次第です)。

したがって、APIコントローラーをテストする場合は、Controller specs単一のリクエストをテストしているとき。


Rails 5+

Rails 5では、リクエスト仕様の速度とリアリズムが改善され、Railsバージョン4のコントローラーおよびリクエスト仕様。 RailsチームとRSpecコアチームの公式推奨事項は、(コントローラー仕様の)代わりに要求仕様を記述することです

12

実際、RSpecチームは公式にコントローラーの仕様は廃止されたと述べています

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

新しいRailsアプリ:Rails-controller-testing gemをアプリケーションに追加することはお勧めしません。RailsチームとRSpecコアチームは、代わりにリクエスト仕様を作成します。リクエスト仕様を使用すると、単一のコントローラーアクションに集中できますが、コントローラーテストとは異なり、ルーター、ミドルウェアスタック、およびラックリクエストとレスポンスの両方が含まれます。 、およびコントローラー仕様でよくある問題の多くを回避するのに役立ちます。Rails 5では、リクエスト仕様は、リクエストまたはコントローラー仕様がRails = 4、Rails Committer TeamのEileen Uchitelle1の作業に感謝します。

17
Quv

アーロン・サムナーの引用:

RailsとRSpecチームは、モデル(ユニット)を直接テストするか、より高レベルの統合テストを使用して、アプリのコントローラーテスト(機能テストレイヤーとも呼ばれます)の置き換えまたは削除を提案します。

新しいAPIの場合、コントローラーテストを使用するよりも、要求仕様を使用して「エンドポイント」(別名、モデルおよびビジネスロジック)を使用することを好みます。

8
aarkerio