AngularJS のテスト
とりあえず、2種類のテストがあり、どちらも十分なサポートがされている。
基本的にangular-seedというのを元に作ればいいんだけど、e2e (end to end) テストについては protractor というのを使うのが新しいようなので、今からはじめるならそちらを使ったほうが良い。
karma での unit テスト
node で完結する、ロジックの単体テスト。主に controller とか filter をテストする。controller で DOM を直でいじっていると実行できない。
サーバサイドとかとの通信とかは全てモックにしなければならない。Angular の DI の仕組みで、モックオブジェクトを外部から注入して単体テストを完結させる。
いろいろ面倒くさいけど、これを書くようにすることで controller / directive の使いわけとかを意識せざるを得なくなるので良い気がする。
protractor による end to end テスト
selenium を使った結合テスト。
protractor は Angular JS 用の e2e テストライブラリ。簡単に selenium-standalone をセットアップするところから、テスト用のユーティリティまでのセット。ドキュメント の通りにやれば OS X では全く苦もなく selenium 環境を作りテストを開始できる。
どこが「Angular JS用」なのかというと、ページロードとか、イベント発火とかで、いちいち自分で wait() を書く必要がなく、Angular 準拠の部分は自動で処理待ちをするので、かなり楽をできる。
karma か protractor か
- karma のテストは早い
- protractor (selenium) は遅い
ので、パターンを網羅したロジックは書きたいなら karma で完結するように書いたほうがいい。
関連エントリー
- AngularJS のテストでページ側のスクリプトを実行する protractor (webdriver) を使った場合、外から executeAsyncScript を使うと文字列でページ側で実行でき...
- Chrome App をテストする Chrome App という、Chrome Extension の延長上にあるスタンドアロンアプリを作れる仕組みがある。これは、しばしば出て...
- AngularJS 依存を持つ filter のテスト myApp = angular.module('myApp', [ 'myApp.filters', 'myApp.services' ])...
- JSDeferred -> Angular $q 置き換え方法 AngularJS には $qっていう promise の枠組みがあるので、使っておくといいこと (ビューが自動的に更新されるだけだけど) ...
- Ruby でスコープをはずれたときに自動で何かをする Guard オブジェクト Perl だと Guard オブジェクトとかいうハックがあって、スコープを出るタイミングで必ず呼ばれるファイナライ...