AngularJSでのユニットテストにコメントコードが意図した通りに動いているか確認するのは書く人間の義務である。ユニットテストによって、コードがどのように振る舞うべきか定義することができる。ユニットテストを自動的に実行することで、振る舞いが意図せず変わっていないか確認することができる。ユニットテストとは何か、何故必要なのかユニットテストとは、1つの関数や、コードの1部分を取り上げて、それが意図したとおりに動作しているか確認するテストを書く、というコンセプトである。以下に、JavaScriptベースのクライアントサイドアプリケーションでユニットテストを書くべき理由を5つ挙げる。正しさの証明ユニットテストが無いと、手動テストを盲目的に信頼するしかない。ユニットテストは、意図したとおりに動作することの証明になる。コンパイラが無いJavaScriptにはコンパイラが無いため、エラーは実行時にしかわからない。ブラウザで実行する前にユニットテストを走らせれば、エラーを検知できる。エラーを早く見つけられるユニットテストによって、実際にアプリケーションを実行するよりも早く以上に気付ける。エンバグを防ぐユニットテストを書くことで、将来的に既存機能を壊してバグを作りこんでしまう可能性を低下させることができる。仕様になるコメントは実装と対応していない可能性があるが、ユニットテストは実装と対応しており、アプリケーションの仕様ともいえる。TDD)とは、アジャイルの方法論で、開発のスタイルを反転させる。TDDでは、コードを実装する前に、テストを書く。TDDの信条は以下のとおり。失敗しているテストがコードを要求している場合にのみ、コードは書かれるテストをパスするのに必要最小限のコードが書かれる重複は全てのステップで取り除かれる全てのテストが通ったら、次に必要な機能のための失敗するテストが追加されるこれらのシンプルなルールによって、以下のことが保証される。コードは有機的に成長し、コードの各行には目的があるコードは高度にモジュール化され、凝集性があり、再利用可能である(テストを書くためにはこれらの要素が必要である)将来的なコードの毀損やバグを防ぐ包括的なテストが提供されるテストは仕様やドキュメンテーションとしても機能するKarma入門Karmaは高速なテストランナーである。NodeJSとSocketIOを利用して、複数のブラウザで高速にテストを実行している。Karmaはテストを可能な限りシンプルで高速にすることを目指している。以下がKarmaのインストール方法である。等)Karmaはプラグインシステムを採用しており、使用するテスティングフレームワークや各ブラウザ向けのテストランナーはプラグインでインストールする。以下のコマンドを実行すると、Jasmineと、Chromeのランチャー(テスト実行時にブラウザを自動で起動するスクリプト)がインストールされる。karma-chrome-launcherKarma及びプラグインのインストールは、テスト対象のプロジェクト内で実行する必要がある点に注意が必要。テストランナーとテスティングフレームワークテストランナーとテスティングフレームワークは混同されがちである。これは、同じライブラリが両方の仕事をすることが多いからと思われる。JavaScript(そしてAngularJS)では、それぞれの目的に2つの分離されたツールを利用する。Karmaはテストランナーで、全てのユニットテストを探してきて、ブラウザを開き、テストを実行して、結果を取得することに責任を持つ。テストの書き方には関知しない。Jasmineはテスティングフレームワークである。テストを書くための文法、API、アサーションの書き方を定義する。テスティングフレームワークにはJasmine以外の選択肢(mocha、qunit等)もある。KarmaプラグインKarmaプラグインは、以下の種類に分けられる。RuquireJS等)Karmaの設定の解説Karmaを使用するには、設定ファイル(karma.conf.js)が必要である。以下は設定ファイルの例である。});};以下、設定ファイルの解説。テスト対象の全てのファイルと、テストが必要とするファイルの読み込みのための起点となるパス。Karmaの設定ファイルからの相対パス。読み込むフレームワークのリスト。読み込むファイルのリスト。AngularJSの場合、angular.jsを最初に読み込んで、その後テストヘルパーを含んだangular-mock.jsを読み込む。その後、アプリケーションのソースコードを読み込み、最後にユニットテストのファイルを読み込む。Karmaのサーバがどのポートを使うか。デフォルトは8080。Karma起動時に開くブラウザ。実際の起動には、それぞれのブラウザに対応したプラグインが必要。1つのユニットテストの終了後に、サーバーを停止するか否か。Jenkins等)環境ではtrueに、それ以外ではfalseにすべき。Karma設定の詳細はhttp://karma-runner.github.io/0.13/config/configuration-file.htmlを参照。以下のコマンドを実行することで、設定ファイルを生成できる。initこれによって、対話シェルが起動する。一連の質問に応えることで、ニーズに応じたkarma.conf.jsファイルが生成される。テストスペックのスタイルJasmineは振る舞い駆動のテストの書式を提供する。振る舞い駆動のテストでは、大量のアサーションを書く代わりに、振る舞いと期待する状態を記述する。一連のテスト(テストツイート)を作成する。これは複数のユニットテストのコンテナである。describeの対象はコントローラーやサービスである。describeのネストも可能である。ユニットテストの単位である。itブロックは、他のitブロックから独立しているべきである。状態のセットアップと、機能の実行、戻り値のチェックが含まれる。それぞれのexpectは値を取り、その後にマッチャーで期待する値を記述する。全てのマッチャーは、expect(value)の後に続けて使用する。以下は代表的なマッチャーの例。2つの変数が同じオブジェクトを参照している場合はtrue。];テストは以下のようになる。});});以下は、angular.mock.jsで定義されている、テスト用ヘルパーメソッド。AngularJSのサービスを関数に注入する$controllerはテスト専用ではなく、AngularJSのサービスの1つ。ユニットテストの実行ユニットテストの実行には、以下のコマンドを実行する。startこのコマンドは現在のディレクトリから自動的にkarma.conf.jsを見つけ出す。Karmaの設定ファイルが別の名前だったり、別の場所にある場合には、パスを指定する必要がある。tests/my_karama.conf.jskarmaコマンドはテスト用のサーバを立ち上げる。設定で記述したそれぞれのブラウザが自動的に起動する。自動的に起動しなかったブラウザも、手動で起動してページにアクセスすることでテストを実行できる。テストの実行結果はコンソールに表示される。ブラウザには何も表示されない。autoWatchがtrueになっている場合、karmaのサーバが起動した状態で、監視対象のファイルを書き換えて保存すると、テストが自動的に再実行される。依存性の注入)が効果的に使われていることである。ユニットテストにおいては、テスト対象のモジュールが何に依存しているかを気にする必要がない。オブジェクトの初期化は全てAngularJSがやってくれる。WordPress.。