私はRails APIに取り組んでおり、現在、コントローラー用のRSpecテストを書くことを計画しています。コントローラの仕様とリクエストの仕様の実際の違いは次のとおりです。APIをテストする場合は、おそらくどちらを使用する必要があります。
Controller specs-Controller specは、Rails機能テストのRSpecラッパーです。単一のシミュレーションを可能にします各例のhttpリクエスト、および予想される結果の指定
リクエスト仕様-リクエスト仕様は、Railsの統合テストの薄いラッパーを提供し、ルーティング(Railsが提供する)を含むスタック全体の動作を駆動するように設計されています)スタブなし(それはあなた次第です)。
したがって、APIコントローラーをテストする場合は、Controller specs
単一のリクエストをテストしているとき。
Rails 5では、リクエスト仕様の速度とリアリズムが改善され、Railsバージョン4のコントローラーおよびリクエスト仕様。 RailsチームとRSpecコアチームの公式推奨事項は、(コントローラー仕様の)代わりに要求仕様を記述することです 。
実際、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の作業に感謝します。
アーロン・サムナーの引用:
RailsとRSpecチームは、モデル(ユニット)を直接テストするか、より高レベルの統合テストを使用して、アプリのコントローラーテスト(機能テストレイヤーとも呼ばれます)の置き換えまたは削除を提案します。
新しいAPIの場合、コントローラーテストを使用するよりも、要求仕様を使用して「エンドポイント」(別名、モデルおよびビジネスロジック)を使用することを好みます。