2017-05-24 3 views
3

私は比較的Angularに慣れていて、アプリケーションをコンポーネントアーキテクチャで作成し始めました。 Angular docsを調べるときは、模擬方法$componentControllerでコンポーネントをテストすることをお勧めします。

しかし、ディレクティブがどのように伝統的に1.5より前の角度でテストされたかを見てみると、$compileサービスを使用して実際にディレクティブテンプレートを作成するのが望ましい方法のようです。 $compileを使用すると、テンプレートロジックとコントローラロジックについてアサーションを作成できます。 $componentControllerメソッドではコントローラロジックをテストすることしかできませんが、ほとんどの複雑さがテンプレートやサービスに存在するので、実際にはそれほど有用ではありません。

誰かが近代的なベストプラクティスについていくつか光を当てることができますか?私には$compileを使用する方が意味がありますので、テンプレートもテストできます。しかしAngularのドキュメントではこれをまったく言及せず、代わりに$componentControllerをお勧めしますか?

+0

コメントをつけて回答すると、意見が増えるかもしれません。私はあなたが頭の上の爪に当たったと思っています、そして、両者の違いに関するあなたの結論。コンポーネントの導入に先立って、彼らはDOM操作を行うためにディレクティブを使用すると言いました(したがって、テストでは$ compileを使用します)。それはまだケースです、私は部品を持っていると思います。 DOMが正しく操作されたことをテストする必要がある場合は、ディレクティブと$ compileを使用する必要があります。私は現在ほとんどコンポーネントを作成する傾向があり、DOMレベルテストでは扱いにくく、ミッションクリティカルなロジックではありません。 –

+1

AngularJSからAngularへの移行を計画している場合を除いて、(特にそうではありませんが)別の角度にタグ付けするべきではありません(特に[angle docs](https://angular.io/) – crashmstr

+0

こんにちは、[私の答え](https://stackoverflow.com/a/44165119/2545680)助けてくれましたか?不明なことがありますか? –

答えて

3

AngularJSの最大の問題の1つは、$scopeです。これは、バインディングをDOMに使用する場所です。それは多くの混乱をもたらした。

ビジネスロジック、UIなどのアプリケーション設計には、ビジネスロジックの場合はcontroller、UIの場合はdirectivesに相当します。しかし、$scopedirectivesで利用可能であるため、コントローラを使用せず、すべてのビジネスロジックをディレクティブに入れることにしました。これにより、両方のレイヤーを同時に実装したため、テストが困難になりました。また、DOM操作が遅いため、テストが遅くなりました。

理想的には、可能な限り多くのテストをビジネスロジックに入れ、UIでは少なくすることが理想的です。フレームワークはビジネスロジックとUIの間の同期を処理するため、そこにバグが発生する可能性はほとんどありません。しかしビジネスロジックでは、ほとんどのバグが導入されています。そのため、新しいAngularJSでは、$componentControllerを使用して、ディレクティブではなくコントローラでビジネスロジックをテストすることを推奨します。

新しい角度には$compileがなく、ほとんどのテストはそこでクラスとして実装されているコントローラ用に書かれています。

+0

答えをありがとう!私は参照してくださいUIの中に「バグの可能性はほとんどない」という感想を繰り返している多くの人がいますが、実際にはそうではありません。私はUIで組み込みの指示文を使用していますが、明らかにテストする必要はありません私自身のテンプレートとコントローラーでこれらの指示文をテストする価値のあるものは何もありません。 – benjyblack

+0

@benjyblack、IMHO、トリッキーなDOM操作を実行するカスタムディレクティブのテストが必要な場合があります。テストはすべきコントローラのターゲットビジネスロジック。 –