如何在 G运行t 中 运行 多个业力目标?
How to run multiple karma targets in Grunt?
我们使用 G运行t 在一次构建中构建多个但相似的应用程序。
这是一个相当复杂和庞大的项目,每个应用程序都有一个文件夹,还有一个名为 share 的文件夹,其中包含许多共享组件。
多个业力目标
Angular 通过名称 (String) 注入依赖项,我们的应用程序具有同名的文件,如 HomeController、MenuController。这迫使我们拆分每个应用程序的业力目标,以便仅从正在测试的共享和特定应用程序加载依赖项。
致命错误
当使用 g运行t 到 运行 时,业力目标仅 运行s 第一次成功而失败 运行 第二次。 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
});
};
G运行t-karma 配置
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'
]),
}
}
};
如何在同一个 g运行t 任务中 运行 两个 karma 目标(A 和 B)?
我的猜测是我必须重置业力服务器(phantomJs?)或 运行 它们作为单独的 "sets" 在同一目标上,但我不知道如何去做。
希望有人能提供帮助!谢谢!
更新1
这个 issue on github 似乎解决了同样的问题,但还没有发布。
也许您可以将 port
选项移动到目标中并为每个目标选择不同的端口?
A: {
options: {
port: 9011,
files: dep.concat([
'app/A/src/**/*.js'
]),
}
},
B: {
options: {
port: 9012,
files: dep.concat([
'app/B/src/**/*.js'
]),
}
}
可行的解决方法
从分发任务中删除 karma
任务。
与其尝试在一个 g运行t 任务中 运行 多个 karma 目标,您可以从命令行(主要是在持续集成服务器上)分别执行多个 g运行t 命令。用于开发很少需要 运行 所有目标)
命令可以是:(可选的 xxxxxx 是测试完成后您想要 运行 执行的任何任务)
grunt testA && grunt testB && grunt xxxxxx
我们使用 G运行t 在一次构建中构建多个但相似的应用程序。 这是一个相当复杂和庞大的项目,每个应用程序都有一个文件夹,还有一个名为 share 的文件夹,其中包含许多共享组件。
多个业力目标
Angular 通过名称 (String) 注入依赖项,我们的应用程序具有同名的文件,如 HomeController、MenuController。这迫使我们拆分每个应用程序的业力目标,以便仅从正在测试的共享和特定应用程序加载依赖项。
致命错误
当使用 g运行t 到 运行 时,业力目标仅 运行s 第一次成功而失败 运行 第二次。 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
});
};
G运行t-karma 配置
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'
]),
}
}
};
如何在同一个 g运行t 任务中 运行 两个 karma 目标(A 和 B)? 我的猜测是我必须重置业力服务器(phantomJs?)或 运行 它们作为单独的 "sets" 在同一目标上,但我不知道如何去做。
希望有人能提供帮助!谢谢!
更新1
这个 issue on github 似乎解决了同样的问题,但还没有发布。
也许您可以将 port
选项移动到目标中并为每个目标选择不同的端口?
A: {
options: {
port: 9011,
files: dep.concat([
'app/A/src/**/*.js'
]),
}
},
B: {
options: {
port: 9012,
files: dep.concat([
'app/B/src/**/*.js'
]),
}
}
可行的解决方法
从分发任务中删除 karma
任务。
与其尝试在一个 g运行t 任务中 运行 多个 karma 目标,您可以从命令行(主要是在持续集成服务器上)分别执行多个 g运行t 命令。用于开发很少需要 运行 所有目标)
命令可以是:(可选的 xxxxxx 是测试完成后您想要 运行 执行的任何任务)
grunt testA && grunt testB && grunt xxxxxx