単体テストの問題をトラブルシューティングしようとしています。
以前はほとんど動作する Maven -> PhantomJS -> Qunit のセットアップがありましたが、予測できなかったため、分解して修正を試みました。
ソフトウェアをアップグレードしました:
Qunit: 1.11.0
PhantomJS: 1.8
Phantom Qunit Runner Latest: https://github.com/jquery/qunit/tree/master/addons/phantomjs
Web GUI が機能していることがわかります。102 のすべてのテストを実行して合格します。コンソールはこれを出力します:
$ phantomjs --disk-cache=false runner.js http://localhost/ui/dcx/test.html
$ Took 16ms to run 0 tests. 0 passed, 0 failed.
ランナーで exit コマンドをコメントアウトすると、QUnit.done のコンソール出力が複数回出力されます。
$ phantomjs --disk-cache=false runner.js http://localhost/ui/dcx/test.html
$ PhantomJS successfully loaded a page
$ QUnit.done callback fired
$ Took 15ms to run 0 tests. 0 passed, 0 failed.
$ QUnit.done callback fired
$ Took 1840ms to run 102 tests. 102 passed, 0 failed.
$ QUnit.done callback fired
$ Took 1841ms to run 102 tests. 102 passed, 0 failed.
$ QUnit.done callback fired
$ Took 1842ms to run 102 tests. 102 passed, 0 failed.
$ QUnit.done callback fired
$ Took 1848ms to run 102 tests. 102 passed, 0 failed.
$ ^C
$
Qunit.done コールバックが実行されるのが早すぎて、複数回実行されているように見えます。
そのコールバックが発生する理由を知っている人はいますか?
テストの包含とログインの遅延が関連している可能性があります。AMD モジュールを使用してテストを定義し、curl.js を使用してテストを取り込みます。セキュリティ ログインが行われるまで、何も起こりません。
curl(['dolla'], function($){
$.ajax({
type: 'POST',
url: '/svc/j_spring_security_check',
data: {
j_username: '7',
j_password: '7'
},
success: function() {
loadTests()
}
});
})
var loadTests = function () {
curl([
// Unit tests
'dcx/dataControls/activity.test'
, 'dcx/dataControls/eventList.test'
, 'dcx/dataControls/mapViewer.view.test'
, 'dcx/pages/deviceDetails.view.test'
, 'dcx/pages/login.test'
, 'dcx/pages/nodeProfiles.test'
, 'dcx/pages/settings.view.test'
], function() {}, function(ex) { throw new Error(ex) })
})
編集:私は根本的な原因に陥っていると思います。空白のページに QUnit を含めると、すぐに QUnit.begin と QUnit.done が呼び出されます。セキュリティ ログインが成功し、curl が単体テストを実行するまで、Qunit の実行を遅らせる必要があります。QUnit の開始を遅らせる方法はありますが、Qunit オブジェクトは引き続き利用可能ですか? start() を呼び出す非同期テストが多数あるため、stop() を使用できません。