6

私はレールにかなり慣れておらず、最初からテストを実装することで「正しい」方法で物事を実行しようとしています。昨日、足場ジェネレーターを使用して、最初のモデル/ビュー/コントローラー構成を作成しました。本当にスキャフォールディングを使うべきではないと言われましたが、Railsコードがどのように構成されているかを学ぶのに役立ちました。

私が気づいたことの1つは、自動生成されたRSpecがほとんどspec/controllersフォルダーに配置されていることです。しかし、Railscastsのこのエピソードを見たとき、彼が

rails generate integration_test [test_name]

単一のテストファイルをspec/requestsフォルダーに配置するコマンド。しかし、彼が書いたすべてのテストはコントローラーと相互作用しました。私が決定しようとしているのは、これらのテストを保存する場所のベストプラクティスです。

テストをspec/requestsフォルダーに保存する必要があるのはいつですか?また、テストをspec / controllersフォルダーに保存する必要があるのはいつですか?フィードバックをいただければ幸いです。

4

2 に答える 2

6

実はこれらは2種類のテストです。コントローラフォルダでは、コントローラのアクションをテストするためのテストを作成する必要があります。リクエストフォルダでは、ビューと対話するためのテストを配置する必要があります。これにより、実際にすべてのアプリケーションパーツがテストされます。そのため、統合テストと呼ばれています。

これらの2つのタイプのテストに関するいくつかの記事があります。

http://everydayrails.com/2012/04/07/testing-series-rspec-controllers.html

http://everydayrails.com/2012/04/24/testing-series-rspec-requests.html

于 2012-08-03T18:18:51.507 に答える
0

コントローラーの仕様は、単一のコントローラーアクションの呼び出しをテストします。通常、ビューはレンダリングされません(ただし、これをオンにすることはできます)が、多くのモデルコードをスタブアウトすることもかなり一般的です。テスト対象のコードとの唯一の相互作用は、単一のコントローラーアクションを呼び出すことです。これらは、コントローラーの単体テストと考えることができます。

一方、リクエストスペックは、スタック全体(ルーティング、コントローラー、ビュー、モデルなど)をテストします。単一のコントローラーアクションを呼び出すだけでなく、ユーザーが実行するアクションに近いアクションを実行します。ページにアクセスし、フォームに入力して、ボタンをクリックします。多くの場合、これは複数のアクション/コントローラーにまたがります。たとえば、ユーザーが商品をカートに追加してから、チェックアウトに関連するさまざまな手順を実行するプロセスを実行するリクエスト仕様を作成できます。

生成するページを操作するには、通常、capybara(webratを引き続き使用できると思います)を使用します。適切なcapybaraドライバーを使用すると、ページ上のjavascriptも実行されるため、たとえば、クライアント側のjavascriptがコントローラーによって生成されたjsonで正しいことを実行することをテストできます(ただし、その多く)

于 2012-08-03T23:26:55.580 に答える