jquery と bootstrap コンポーネントを利用するいくつかのディレクティブを含む angularjs アプリがあります。したがって、ディレクティブをテストするために、karma.unit.conf.js で次の順序でファイルを定義しました。
files = [
JASMINE,
JASMINE_ADAPTER,
'app/components/jquery/jquery.js',
'app/scripts/vendor/bootstrap.js',
'app/components/angular/angular.js',
'app/components/angular-mocks/angular-mocks.js',
'app/components/angular-ui/build/angular-ui.js',
'app/scripts/app.js',
'app/scripts/**/*.js',
'test/spec/unit/**/*.js'
];
最初に angularjs と angular-mocks をロードし、次に jquery と bootstrap をロードすると、angular が独自の jQLite を使用するため、テストが実行されて失敗します。しかし、ここで書いたように順序を変更すると、次のようになります。
編集:
例外の原因は jQuery ではなく、bootstrap.js であることがわかりました。bootstrap.js の行にコメントを付けると、テストが実行されます (そして、ブートストラップ コンポーネントがロードされていないため、期待どおりに失敗します)。上記のように(またはテスト前に他の場所で)ブートストラップをロードすると、次のようになります。
PhantomJS 1.8 (Linux) Directive: tkModal should make hidden element visible FAILED[39m
at /home/ir/work/campari/app/components/jquery/jquery.js:1763
at /home/ir/work/campari/app/components/jquery/jquery.js:2833
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
...
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:3656
at /home/ir/work/campari/app/components/jquery/jquery.js:648
at /home/ir/work/campari/app/components/jquery/jquery.js:270
at /home/ir/work/campari/app/components/jquery/jquery.js:3657
at /home/ir/work/campari/app/components/jquery/jquery.js:3664
at /home/ir/work/campari/app/components/angular-mocks/angular-mocks.js:1589
at /home/ir/work/campari/app/components/angular-mocks/angular-mocks.js:1627
この行at /home/ir/work/campari/app/components/jquery/jquery.js:2850
は、テストが失敗するまで約 15,000 回無限に繰り返されます (jQuery が jquery.js:1763 で internalData 関数を実行しようとしたときに発生しているようです)。
任意のアイデアをいただければ幸いです
編集:解決済み
答えが見つかりました。これはバージョン 2.3.0 のブートストラップの問題であり、2.3.1 に更新すると解決しました。https://github.com/twitter/bootstrap/issues/6835を参照してください