2016-07-06 89 views
0

當我更改文件(如HelloWorld.js)時,我想使用Karma運行特定的測試套件(稱爲HelloWorldSpec.js)。gulp.watch導致「任務完成回調調用次數過多」

所以我創造了這個咕嘟咕嘟任務:

gulp.task('dev', function(done) { 
    // Watch source code changes 
    gulp.watch('src/**/*.js').on('change', function(file) { 

    // Assemble path to test file 
    var pathObject = path.parse(file.path); 
    var specificationPath = 'test/' + pathObject.name + 'Spec.js'; 

    // Run test file 
    new Server({ 
     configFile: __dirname + '/karma.conf.js', 
     files: [ 
     'dist/**/*.js', 
     specificationPath 
     ], 
     singleRun: true 
    }, done).start(); 
    }); 
}); 

我現在的問題是,我通過done回調到每一個試運行後,執行它的噶服務器。因此,我得到第二源代碼修改下面的錯誤(每以下):

Error: task completion callback called too many times

如果我沒有在done回調傳遞給Server,然後我咕嘟咕嘟任務的第一次測試運行後結束。但我想繼續觀察源代碼修改。我怎樣才能做到這一點?

回答

0

我也遇到了同樣的問題。我偶然發現了這個linkthis其實際工作。

gulp.task('test', function (done) { 
    var server = new Server({ 
     configFile: __dirname + '/karma.conf.js', 
     singleRun: true 
    }); 

    server.on('browser_error', function (browser, err){ 
     gutil.log('Karma Run Failed: ' + err.message); 
     throw err; 
    }); 

    server.on('run_complete', function (browsers, results){ 
     if (results.failed) { 
      throw new Error('Karma: Tests Failed'); 
     } 
     gutil.log('Karma Run Complete: No Failures'); 
     done(); 
    }); 

    server.start(); 
}); 

希望這可以幫助你!

0

我在與gulp-watch同時使用webpack手錶時遇到過類似的問題。

這是我大口設置:

gulp.task("javascript", function (done) { 
    webpack(webpackConfig, function (err, stats) { 
     // logs errors and stats here 
     done(); 
     browserSync.reload(); 
    }); 
}); 

gulp.watch([JS_SOURCE, HTML_VIEWS], ["javascript"]); 

而且我的WebPack配置:

module.exports = { 
    module: { 
     loaders: [ 
      { 
       test: /\.(js|jsx)$/, 
       loaders: "babel-loader", 
       exclude: /node_modules/, 
       options: { 
        presets: ["es2015"] 
       } 
      } 
     ] 
    }, 
    watch: true 
}; 

卸下手錶:在固定的問題的WebPack配置真正

+0

感謝您提供反饋,但我沒有使用webpack,因此我無法應用您的修復程序。 :( –

相關問題