我们正在使用Grunt在一个版本中构建多个但相似的应用程序。 它是一个相当复杂的大型项目,每个应用程序都有一个文件夹,还有一个名为share的文件夹,包含许多共享组件。
多个业力目标
Angular通过名称(String)注入依赖项,我们的应用程序具有与HomeController,MenuController相同名称的文件。这迫使我们拆分每个应用程序的业力目标,因此仅从正在测试的共享和特定应用程序加载依赖项。
致命错误
当使用grunt运行业力目标时,它只运行第一次成功而无法运行第二次。 Fatal error: listen EADDRINUSE
错误以某种方式与正在使用的端口相关。
Karma配置(简化)
module.exports = function(config) {
'use strict';
config.set({
autoWatch: false,
basePath: '../',
frameworks: ['jasmine'],
exclude: [],
browsers: ['PhantomJS'],
plugins: [
'karma-html-reporter',
'karma-junit-reporter',
'karma-coverage',
'karma-phantomjs-launcher',
'karma-jasmine',
'karma-brackets'
],
singleRun: false,
colors: true,
logLevel: config.LOG_DEBUG
});
};
Grunt-karma config
var dep = [
'bower_components/**/*.js',
'app/shared/**/*.js',
];
module.exports = {
options: {
configFile: 'test/karma.conf.js',
reporters: ['brackets', 'html', 'junit', 'coverage'],
browsers: ['PhantomJS'],
port: 9002,
singleRun: true
},
A: {
options: {
files: dep.concat([
'app/A/src/**/*.js'
]),
}
},
B: {
options: {
files: dep.concat([
'app/B/src/**/*.js'
]),
}
}
};
如何在同样的grunt任务中同时运行业力目标(A和B)? 我的猜测是我必须重置业力服务器(phantomJs?)或将它们作为单独的"设置"在同一个目标上,但我无法找到如何做到这一点。
希望有人可以提供帮助!谢谢!
UPDATE1
这个issue on github似乎解决了同样的问题,但尚未发布。
答案 0 :(得分:0)
也许您可以将port
选项移动到目标中,并为每个选项选择不同的端口?
A: {
options: {
port: 9011,
files: dep.concat([
'app/A/src/**/*.js'
]),
}
},
B: {
options: {
port: 9012,
files: dep.concat([
'app/B/src/**/*.js'
]),
}
}
答案 1 :(得分:0)
可行的解决方法
从分发任务中删除karma
任务。
您可以在命令行中单独执行多个grunt命令,而不是尝试在一个grunt任务中运行多个karma目标(主要在持续集成服务器上。对于开发,很少需要运行所有目标)
命令可以是:(可选xxxxxx是测试完成后要运行的任何任务)
grunt testA && grunt testB && grunt xxxxxx