2014-09-19 51 views
1

我遇到了this error with gulp.watch。从本质上讲,当一个测试单元发生错误而失败时,watch命令会挂起 - 只运行一次,然后观察不会再次触发事件。使用gulp.watch with browserified karma/jasmine单元测试失败,出错

规定的解决方法是使用gulp-plumber来防止出错。但是,这只适用于流。如果我有browserify运行业力测试在一起,我的配置类似于这样(我不能确定如何挂钩流进这个坏小子,使管道工):

gulp.task('watch', function() { 
    gulp.watch('src/**/*.js', ['test']); 
    gulp.watch('test/**/*.spec.js', ['test']); 
}); 

gulp.task('test', function() { 
    return karma.server.start({ 
    files: [ 
     'test/**/*.spec.js' 
    ], 
    frameworks: ['browserify', 'jasmine'], 
    preprocessors: { 
     'test/**/*.spec.js': ['coverage', 'browserify'] 
    }, 
    browsers: ['PhantomJS'], 
    reporters: ['coverage', 'spec', 'failed'], 
    browserify: { 
     debug: true, 
     transform: ['browserify-istanbul'] 
    }, 
    singleRun: true 
    }); 
}); 

有没有人有一种变通方法运行测试单位的手表或建议如何才能使这与gulp管道工一起工作?

回答

7

这里的解决方案是从图片中删除gulp.watch。由于browserify被用作预处理器,因此Karma的内部监控功能很神奇,不需要watchify或gulp.watch。

gulp.task('watch', function() { 
    return karma.server.start({ 
    configFile: __dirname + '/karma.conf.js' 
    }); 
}); 

gulp.task('test', function() { 
    return karma.server.start({ 
    configFile: __dirname+'/karma.conf.js', 
    singleRun: true 
    }); 
}); 

而且我调整配置文件:

module.exports = function(config) { 
    config.set({ 
    files: [ 
     'test/**/*.spec.js' 
    ], 
    frameworks: ['browserify', 'jasmine'], 
    preprocessors: { 
     'test/**/*.spec.js': ['coverage', 'browserify'] 
    }, 
    browsers: ['PhantomJS'], 
    reporters: ['coverage', 'spec', 'failed'], 
    browserify: { 
     debug: true, 
     transform: ['browserify-istanbul'] 
    } 
    }); 
};