1

当我更改文件(如)时,我想使用 KarmaHelloWorld.js运行特定的测试套件(称为)。HelloWorldSpec.js

因此我创建了这个 Gulp 任务:

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回调传递给 Karma 服务器,该服务器在每次测试运行后执行它。因此,我在第二次源代码修改(以及以下所有内容)中收到以下错误:

错误:任务完成回调调用了太多次

如果我没有将done回调传递给Server,那么我的 Gulp 任务将在第一次测试运行后结束。但我想继续关注源代码修改。我怎样才能做到这一点?

4

2 回答 2

0

我也面临同样的问题。我偶然发现了这个链接这个链接确实有效。

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();
});

希望这对你有帮助!

于 2016-08-24T13:56:09.557 回答
0

当我与 gulp-watch 同时使用 webpack watch 时,我遇到了类似的问题。

这是我的 gulp 设置:

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 配置中删除watch:true解决了这个问题。

于 2017-04-25T08:33:08.440 回答