2016-07-06 90 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,因此我无法应用您的修复程序。 :( –

相关问题