デフォルトでは
$ grunt testを実行した後に、watch:testタスクで監視しているファイルを編集and保存すると
以下のエラーを吐いてテストが実行されません・・・(僕の環境だけかもしれませんが)
Running "compass:dist" (compass) task directory .tmp/styles/ create .tmp/styles/main.css (2.475s) Compilation took 2.477s Running "compass:server" (compass) task unchanged app/styles/main.scss Compilation took 0.198s Running "connect:test" (connect) task Fatal error: Port 9001 is already in use by another process.
どうやら9001番ポートでムダに待とうとしているようです。
現象としてはこんな感じかと。
grunt test 実行!!! clean:server coffee createDefaultTemplate jst compass connect:test // 9001ポートで待つ! ... A mocha watch:test // ファイルの監視 !!!ファイルを編集and保存!!! clean:server coffee createDefaultTemplate jst compass connect:test // Aですでに9001を使用してるのでこける
ということでGruntfile.jsを2箇所修正します。
1箇所目 (watchタスクのtestターゲット)
watch: { ... test: { files: ['<%= yeoman.app %>/scripts/{,*/}*.js', 'test/spec/**/*.js'], tasks: ['test:watch'] // ここ! test -> test:watchへ } }2箇所目 (testタスクを登録しているところ)
grunt.registerTask('test', function(target) { var tasks = ['clean:server', 'coffee', 'createDefaultTemplate', 'jst', 'compass']; if (target !== 'watch') { // watchタスクから呼ばれた場合はなにもしない。 // それ以外は9001で待つ! tasks.push('connect:test'); } tasks.push('mocha'); if (target !== 'watch') { // watchタスクから呼ばれた場合はなにもしない。 // それ以外はwatchタスクを実行する tasks.push('watch:test'); } grunt.task.run(tasks); });