grunt karma 覆盖在 jenkins 上失败,但在 windows/unix 上有效
Posted
技术标签:
【中文标题】grunt karma 覆盖在 jenkins 上失败,但在 windows/unix 上有效【英文标题】:grunt karma coverage fails on jenkins but works on windows/unix 【发布时间】:2017-06-18 02:31:30 【问题描述】:我有一个使用 grunt 和 browserify 构建的节点项目,并使用 karma 和 jasmine 使用 browserify-istanbul 进行代码覆盖率测试。
该任务在 windows 和 linux 上都可以正常运行,但是由于 browserify 而在 jenkins 上运行时失败。
运行“业力:覆盖”(业力)任务 31 01 2017 11:38:48.891:ERROR [framework.browserify]: 捆绑错误 31 01 2017 11:38:48.892:ERROR [framework.browserify]:错误:第 2 行:意外令牌:解析文件时:/a/path/to/a/file.json 31 01 2017 11:38:48.912:INFO [karma]: Karma v1.4.1 服务器在 http://0.0.0.0:9876/ 开始 2017 年 3 月 1 日 11:38:48.913:INFO [启动器]:以无限并发启动浏览器 PhantomJS 31 01 2017 11:38:48.917:ERROR [framework.browserify]: 捆绑错误 31 01 2017 11:38:48.918:ERROR [framework.browserify]:错误:第 2 行:意外令牌:解析文件时:/a/path/to/another/file.json 2017 年 3 月 1 日 11:38:48.922:INFO [启动器]:启动浏览器 PhantomJS 31 01 2017 11:38:49.561:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: 连接到套接字 hd7llziNhpmzkjibAAAB 与 id 81120883 警告:任务“业力:覆盖”失败。使用 --force 继续。覆盖任务的业力配置如下:
module.exports = function( config )
config.set(
basePath: '..',
frameworks: [ 'browserify', 'jasmine' ],
files: [
// load dependencies here
pattern: 'test/**/*.spec.js', watched: false, included: true, served: true ,
pattern: 'spec/**/*.json', watched: true, served: true, included: false ,
pattern: 'spec/**/*.xml', watched: true, served: true, included: false ,
pattern: 'spec/**/*.html', watched: true, included: false, served: true ,
],
preprocessors:
'test/**/*.spec.js': [ 'browserify' ]
,
reporters: [ 'coverage' ],
colors: true,
logLevel: config.LOG_INFO,
autoWatch: false,
browsers: [ 'PhantomJS' ],
browserify:
debug: true,
transform: [ 'browserify-shim', 'hbsfy', 'brfs', 'browserify-istanbul',
ignore: [
'**/test/**',
'**/*.hbs',
'**/*.json',
'**/js/shims/*.js',
],
,
],
coverageReporter =
dir: 'coverage',
reporters: [
type: 'text',
type: 'html', subdir: '.',
type: 'cobertura', subdir: '.'
]
,
plugins: [
'karma-phantomjs-launcher',
'karma-jasmine',
'karma-browserify',
'karma-mocha-reporter'
'karma-coverage',
],
singleRun: true
);
;
我还有其他项目可以很好地使用这种没有 json 文件的配置。是否有任何原因导致 browserify 在 Jenkins 上的 *.json 文件上失败,但在 Windows/Linux 上运行良好。否则这里还有其他危险信号吗?
“browserify-istanbul”转换可能是这里的罪魁祸首吗?
【问题讨论】:
删除引用 *.json 文件的测试文件可以解决问题。有什么理由为什么这应该发生在 Jenkins 上,而不是在过度环境中?将 browserify-istanbul 转换与其他转换一起使用似乎是一个问题。 【参考方案1】:也许我来晚了,但这可以解决像我这样为这个问题苦苦挣扎的少数人的生活。
如果我们看一下 browserify-istanbul,我们可以观察到这个函数:
function shouldIgnoreFile(file, options)
var ignore = options.defaultIgnore === false ? [] : defaultIgnore;
ignore = ignore.concat(options.ignore || []);
return ignore.some(function(pattern)
return minimatch(file, pattern, options.minimatchOptions);
);
我的第一个猜测是,由于某种原因,默认忽略被忽略,所以我强制它......但问题仍然存在。
剩下的第二个也是唯一的可能性是 minimatch 在做诡计......我是对的,我敢打赌,在你的包错误路径中:/a/path/to/a/file.json,有一个目录以 . 开头,例如 .jenkins/test-enviroment/src/.../file.json,这就是问题所在。在本地环境中,您不需要检查以点开头的目录或文件的路径,但在 jenkins 目录中,此 .directory 会添加到路径中,导致通配符模式检查器失败。
要修复它,就像将选项 minimatchOptions: dot: true 传递给 browserify-istanbul 一样简单。
browserify: debug: true, transform: [ 'browserify-shim', 'hbsfy', 'brfs', 'browserify-istanbul', ignore: [ '**/test/**', '**/*.hbs', '**/*.json', '**/js/shims/*.js', ], minimatchOptions: dot: true , ]
【讨论】:
完全忘记了这个问题 - 你的答案看起来很棒!以上是关于grunt karma 覆盖在 jenkins 上失败,但在 windows/unix 上有效的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jenkins 从 Karma.js 获得百分比覆盖率
当主机更改源时,grunt karma 对 vagrant 进行测试 grunt/karma 未检测到它
Karma start和grunt karma之间的区别:单位