javascript - How can I pass custom data to my mocha tests? -
we using sauce labs cross-platform/cross-browser testing.
you can find test suite in gist (to save room in question): https://gist.github.com/chevex/397a5a18a1a386897b41
the problem way figure out how pass custom data test suite via environment variable. because of this, when gulp task tries run test suite against multiple targets in parallel, end running against same target since loop done iterating , process.env.sauce_target set final value before first suite runs.
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); }); the closure provided foreach doesn't because it's setting global value (process.env.sauce_target) on each iteration.
is there better way pass sauce_target test suite can run multiple test suites in parallel different target values?
i can working if run tests synchronously takes far longer want to. thing preventing parallelism fact can't pass encapsulated values mocha suite.
you can run tests in several browsers in parallel using child_process module.
var exec = require('child_process').exec; function runmochatests(browser) { return new promise(function(resolve, reject) { var env = {sauce_target: browser}; exec('./node_modules/.bin/mocha --reporter spec', {env: env}, function(err) { if(err !== null) { return reject(err); } return resolve(); }); }); } it creates child process test. current browser availabe process.env.sauce_target.
then can use function in gulp task run tests in different browsers.
gulp.task('tests', function() { return promise.all(['chrome', 'firefox', 'internet explorer'].map(function(browser) { return runmochatests(browsers); })); }); here used promises because gulp can accept them task result , wait until tests finished in browsers.
also can add here syntax sugar denodeify make work exec bit shorter.
Comments
Post a Comment