【发布时间】:2015-05-30 21:22:50
【问题描述】:
我们正在使用sauce labs 进行跨平台/跨浏览器测试。
你可以在这个要点中找到我的测试套件(为了节省这个问题的空间):https://gist.github.com/chevex/397a5a18a1a386897b41
问题是我能弄清楚如何将自定义数据传递给测试套件的唯一方法是via an environment variable。因此,当我的 gulp 任务尝试针对多个目标并行运行测试套件时,它们最终都会针对同一个目标运行,因为循环已完成迭代,并且 process.env.SAUCE_TARGET 甚至在第一个套件之前设置为最终值运行。
var gulp = require('gulp');
var gulpMocha = require('gulp-mocha');
var mergeStream = require('merge-stream');
gulp.task('sauce-tests', function () {
var targets = ['chrome', 'firefox', 'internet explorer'];
var streams = targets.map(function (target) {
process.env.SAUCE_TARGET = target;
return gulp.src('./test/sauce-tests.js', {read:false})
.pipe(gulpMocha({ reporter: 'spec' });
});
return mergeStream.apply(null, streams);
});
forEach 提供的闭包无济于事,因为它在每次迭代时设置了一个本质上是全局的值 (process.env.SAUCE_TARGET)。
有没有更好的方法将SAUCE_TARGET 传递给我的测试套件,以便我可以以不同的目标值并行运行多个测试套件?
如果我同步运行所有测试,我可以让它工作,但这比我想要的要长得多。唯一阻止并行性的是我无法将封装的值传递给我的 mocha 套件。
【问题讨论】:
标签: javascript node.js gulp mocha.js saucelabs