18

AngularJS を使用した Web アプリの開発を開始したばかりですが、適切にテストする際に問題が発生しているため、アドバイスを利用できます。

通常、テストするコンポーネントは次のとおりです。

  1. Web API
  2. 角度コントローラー
  3. 角度ルーティング
  4. HTML レンダリングとコントローラーの HTML 要素への Angular バインディング

最小限の労力で、可能であれば重複することなく、これらすべてをテストするにはどうすればよいでしょうか?

データベース中心のアプリケーションの場合、すべてのテストに十分なデータを生成し、DB とテストをリセットするプロセスが必要になるため、完全な統合テスト (つまり、データがロードされたデータベースに接続されたライブ サーバー) は特に面倒です。互いのデータを変更しないように注意する必要があります。(ここで何か不足している場合はお知らせください)

上記の点から、サーバーとクライアントの間のリンクを切断し、モック データのみを使用して Angular テストを実行するのが最善であると想定しています。

また、E2E テストが考えられるすべてのシナリオを処理する場合、ユニット テスト コントローラーは、それらの値がモデルにバインドされているため冗長であると想定しています (したがって、上記の 2、3、および 4 のすべてをテストすることになります)。単体テストは、非常に複雑なコントローラーで、またはサービスとディレクティブをテストする場合にのみ役立ちます。

$httpBackendただし、単体テストで行うように、テストごとに を使用してモックする方法に関する情報は見つかりませんでしexpect*()た。Angular のドキュメントでは、必要に応じwhen*()て時折プラスを使用することを提案しているようです。passthrough()

ただし、これにより、すべてのシナリオのテスト データを作成するという前述の問題が発生し、テストが影響を受けないようにするために、各テストの前にインメモリ DB をリセットする必要がある可能性があります。また、サーバーへの呼び出しが欠落しているか冗長ではないことを確認するためのどのチェックを使用するかの安全性が失われています。$httpBackEnd.expect*()これは、これをチェックするために単体テストコントローラーも必要であることを示唆しています。

上記の4つのコンポーネントのテストと上記の懸念に対処するAngularJSアプリの詳細なテスト戦略を誰かが提供できますか?

4

2 に答える 2

9
  1. わかりません - Angular アプリは理論的にはバックエンドから切り離されているため、Angular テストとバックエンド テストを混合する必要がある特別な理由はありません。他のコンポーネントが正常に動作することを前提として、各テスト スイートでそれらを個別にテストします。(したがって、angular をテストするときは、サーバーが期待どおりに動作すると想定します。)

  2. 単体テスト - E2E テストよりも詳細なテストを提供します。コードが直面する特定の条件を確認する方が簡単です。また、必要に応じてすべての依存関係をモックアウトし、単体テストが関心を持っているコンポーネントだけをテストすることも簡単です。単体テストは、UI がどのように機能するか、または適切なデータが正しくバインドされているかどうかには関係なく、ビジネス ロジックには関係しません。アプリの正しいです。

  3. (および 4) E2E テスト - 粒度が低く、UI がエンド ユーザーの観点から期待どおりに見えることを確認することに重点を置いています。ライブ データベースに対してテストするのは面倒だというあなたの意見は正しいです (完全なエンド ツー エンドの統合テストによって提供される安全性を享受する人もいますが) 。

于 2012-11-09T17:55:59.797 に答える
0

このhttps://www.sitepoint.com/unit-and-e2e-testing-in-angularjs/を参照してください。サービス/ファクトリが http サービスを使用してリモート API を呼び出す場合は、単体テストのためにそこから偽のデータを返すことができます。新しい Angular プロジェクトを開始する場合は、E2E テストに Protractor を使用することを検討してください。

于 2016-09-01T11:16:18.663 に答える