web-dev-qa-db-ja.com

統合テストよりもシステムテストを選択する場合Rails 5.1?

Rails 5.1のリリースでは、システムテストが含まれていました。つまり、JavaScriptもRailsでテストできます。Railsガイドでサンプルテストについて説明しています- 記事の作成両方の方法で:システムテストと統合テストを介して。

ここでの質問は次のとおりです。beforeRails 5.1統合テストで複雑なテストケースを作成していましたが、テストケースを作成するための2つのオプションがあります。次のようなテストケースを作成できます。

test: should create article

統合テストで、しかし私はシステムテストで同じテストケースを書くこともできます。

では、テストケースを作成するためにシステムテストを選択する必要があるのはいつですか。統合テストを選択するのはいつですか。

19
Zia Qamar

短い答えはMikDietによって与えられました。長い答えについては、システムテストと統合テストの ドキュメント を確認してください。

システムテストでは、実際のブラウザーまたはヘッドレスドライバーのいずれかでテストを実行して、アプリケーションとの完全なユーザーインタラクションをテストできます。

簡単な経験則では、Javascriptと対話するすべてのテストはシステムテストとして実行する必要があります。ただし、ブラウザの画面サイズを指定できるため、これらを使用してレスポンシブレイアウトをテストすることもできます。

統合テストは、アプリケーションのさまざまな部分がどのように相互作用するかをテストするために使用されます。これらは通常、アプリケーション内の重要なワークフローをテストするために使用されます。

統合テストは、ブラウザーを介して実行されないため、異なります。結果ページのHTMLを操作することはできますが、操作するのはstatic出力であることを忘れないでください。

統合テストでは、主にコントローラーアクションの動作を確認し、ユーザーが何を表示して操作するかについてはあまり確認しません。ドキュメントのこの部分は、統合テストのすべてについて理解するのに役立つ場合があります。 コントローラーの機能テスト

18
jdno

TL; DR:今日開始したアプリでは、統合テストではなくシステムテストを使用します。統合テストの唯一の利点は速度です。

システムテストには、統合テストに比べて2つの大きな利点があると思います。

  • それらをシミュレートするための合成要求を行う代わりに、実際の画面との相互作用をテストします。
  • それらははるかに現実的で包括的です。たとえば、Javascriptの一部が壊れていると仕様が失敗しますが、統合テストでは無視されます。

統合テストの唯一の利点はスピードだと思います。それらは確かにはるかに高速です( 私が行ったこの実験を確認してください )。私にとって、速度の違いはそれほど大きな問題ではありません。理由は次のとおりです。

  • ボックス内で2秒未満で分離システムテストを実行できます。それは私のコーディングの幸福のための十分なフィードバックです。
  • 私は、大規模なスイートの並列化を備えたクラウドテストランナーに依存しています。

今日では、ローカルとクラウドの両方の速度と並列化で十分であり、時間とともに改善されると思います。したがって、今日新しいアプリを開始する場合は、システムテストの方がはるかに安全だと思います。

2
jmanrubia