タスク中に端末に書き込む特定の単調なタスクが、同時に実行されると互いに上書きするように見えるという興味深い問題に遭遇しました。例えば:
単体テスト用と e2e テスト用の 2 つのタスクを同時に実行しようとしています。どちらも私が取り組んでいるファイルを自動監視する必要があります。そのため、Gruntfile.js に次のものがあります (これらは単なる興味深い部分です:
Gruntfile.js:
concurrent: {
options: { logConcurrentOutput: true },
server: [
'copy:styles'
],
test: [
'copy:styles'
],
dist: [
'copy:styles',
'imagemin',
'svgmin'
],
continuous: {
tasks: [
'karma:unit_auto',
'karma:e2e_auto'
]
}
},
karma: {
unit: {
configFile: 'karma.conf.js',
singleRun: true
},
unit_auto: {
configFile: 'karma.conf.js',
autoWatch: true,
singleRun: false
},
e2e: {
configFile: 'karma-e2e.conf.js',
singleRun: true
},
e2e_auto: {
configFile: 'karma-e2e.conf.js',
autoWatch: true,
singleRun: false
}
}
////////// and later in the file....... ///////////
grunt.registerTask('continuous', [
'clean:server',
'concurrent:continuous'
]);
コマンド ラインから 'grunt Continuity' を実行すると、予想どおり、2 つのブラウザー ウィンドウがポップアップ表示されます。多くの場合、最初の実行時に、見たい出力を端末から取得します。
$grunt Continuous の最初の実行時:
user@myMachine:/path/to/working/directory$ grunt continuous
Running "clean:server" (clean) task
Running "concurrent:continuous" (concurrent) task
Running "karma:e2e_auto" (karma) task
Running "karma:unit_auto" (karma) task
INFO [karma]: Karma v0.12.10 server started at http://localhost:9999/
WARN [karma]: Port 9998 in use
INFO [launcher]: Starting browser Chrome
WARN [karma]: Port 9999 in use
INFO [karma]: Karma v0.12.10 server started at http://localhost:10000/_e2e/
INFO [launcher]: Starting browser Chrome
INFO [Chrome 33.0.1750 (Linux)]: Connected on socket raGtr-40ZhPP7nCFXwvB with id 67817341
INFO [Chrome 33.0.1750 (Linux)]: Connected on socket IM2e8gy38Np1dL4fXwuy with id 77648855
Chrome 33.0.1750 (Linux): Executed 4 of 4 SUCCESS (0.11 secs / 0.104 secs)
Chrome 33.0.1750 (Linux): Executed 1 of 1 SUCCESS (0.206 secs / 0.167 secs)
ただし、監視対象のファイルを変更 (および保存) すると、奇妙な結果が表示され始めます。同じファイルを何度も保存すると、並行タスクから異なる出力が得られることが多いことに注意してください。
同じファイルを何度も保存した後:
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/app.js".
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/app.js".
Chrome 33.0.1750 (Linux): Executed 4 of 4 SUCCESS (0.114 secs / 0.103 secs)
Chrome 33.0.1750 (Linux): Executed 1 of 1 SUCCESS (0.159 secs / 0.12 secs)
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/app.js".
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/app.js".
Chrome 33.0.1750 (Linux): Executed 0 of 4 SUCCESS (0 secs / 0 secs)
Chrome 33.0.1750 (Linux): Executed 1 of 1 SUCCESS (0.181 secs / 0.148 secs)
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/app.js".
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/app.js".
Chrome 33.0.1750 (Linux): Executed 0 of 4 SUCCESS (0 secs / 0 secs)
Chrome 33.0.1750 (Linux): Executed 1 of 1 SUCCESS (0.141 secs / 0.12 secs)
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/app.js".
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/app.js".
Chrome 33.0.1750 (Linux): Executed 0 of 4 SUCCESS (0 secs / 0 secs)
Chrome 33.0.1750 (Linux): Executed 1 of 1 SUCCESS (0.241 secs / 0.219 secs)
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/app.js".
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/app.js".
Chrome 33.0.1750 (Linux): Executed 0 of 1 SUCCESS (0 secs / 0 secs)
Chrome 33.0.1750 (Linux): Executed 1 of 1 SUCCESS (0.253 secs / 0.227 secs)
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/controllers/mmsLandingPageCtrl.js".
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/controllers/mmsLandingPageCtrl.js".
Chrome 33.0.1750 (Linux): Executed 3 of 4 SUCCESS (0 secs / 0.091 secs)
Chrome 33.0.1750 (Linux): Executed 1 of 1 SUCCESS (0.208 secs / 0.151 secs)
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/controllers/mmsLandingPageCtrl.js".
INFO [watcher]: Changed file "/var/www/web-tcad/app/scripts/controllers/mmsLandingPageCtrl.js".
Chrome 33.0.1750 (Linux): Executed 0 of 4 SUCCESS (0 secs / 0 secs)
Chrome 33.0.1750 (Linux): Executed 1 of 1 SUCCESS (0.249 secs / 0.218 secs)
ここでの問題は、ログが実際に端末にどのように書き込まれているかに起因すると思います...つまり、テストが実行されるたびに、うなり声タスクが端末の最後の行を消去し、現在の進行状況に置き換えます。この動作を制御する必要があるか、問題を回避するために私の単調なタスクを別の方法で設定する必要があるという提案はありますか?
乾杯!