Skip to content

Commit

Permalink
run all browsers concurrently
Browse files Browse the repository at this point in the history
  • Loading branch information
boneskull committed Sep 27, 2017
1 parent 86e76f9 commit 918d78a
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 52 deletions.
29 changes: 1 addition & 28 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,36 +25,8 @@ matrix:
env: TARGET=test-node
- node_js: '8'
env: TARGET=lint
# phantomjs
- node_js: '8'
env: TARGET=test-browser
# chrome
- node_js: '8'
env: TARGET=test-browser BROWSER="chrome@latest" PLATFORM="Windows 8"
# edge
- node_js: '8'
env: TARGET=test-browser BROWSER="MicrosoftEdge@latest" PLATFORM="Windows 10"
# ie11
- node_js: '8'
env: TARGET=test-browser BROWSER="internet explorer@11.0" PLATFORM="Windows 8.1"
# ie10
- node_js: '8'
env: TARGET=test-browser BROWSER="internet explorer@10.0" PLATFORM="Windows 8"
# ie9
- node_js: '8'
env: TARGET=test-browser BROWSER="internet explorer@9.0" PLATFORM="Windows 7"
# ie8
- node_js: '8'
env: TARGET=test-browser BROWSER="internet explorer@8.0" PLATFORM="Windows 7"
# ie7
- node_js: '8'
env: TARGET=test-browser BROWSER="internet explorer@7.0" PLATFORM="Windows XP"
# firefox
- node_js: '8'
env: TARGET=test-browser BROWSER="firefox@latest" PLATFORM="Windows 8.1"
# safari
- node_js: '8'
env: TARGET=test-browser BROWSER="safari@latest" PLATFORM="OS X 10.11"

before_install: scripts/travis-before-install.sh

Expand All @@ -76,3 +48,4 @@ addons:
paths:
- .karma/
- ./mocha.js
sauce_connect: true
59 changes: 38 additions & 21 deletions karma.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ var mkdirp = require('mkdirp');
var baseBundleDirpath = path.join(__dirname, '.karma');
var osName = require('os-name');

var browserPlatformPairs = {
'chrome@latest': 'Windows 8',
'MicrosoftEdge@latest': 'Windows 10',
'internet explorer@11.0': 'Windows 8.1',
'internet explorer@10.0': 'Windows 8',
'internet explorer@9.0': 'Windows 7',
'firefox@latest': 'Windows 10',
'safari@latest': 'OS X 10.12'
};

module.exports = function (config) {
var bundleDirpath;
var cfg = {
Expand Down Expand Up @@ -51,7 +61,7 @@ module.exports = function (config) {
reporters: ['spec'],
colors: true,
browsers: [osName() === 'macOS Sierra' ? 'Chrome' : 'PhantomJS'], // This is the default browser to run, locally
logLevel: config.LOG_INFO,
logLevel: config.LOG_DEBUG,
client: {
mocha: {
reporter: 'html'
Expand Down Expand Up @@ -79,18 +89,17 @@ module.exports = function (config) {
if (env.TRAVIS) {
console.error('Travis-CI detected');
bundleDirpath = path.join(baseBundleDirpath, process.env.TRAVIS_BUILD_ID);
if (env.BROWSER && env.PLATFORM) {
if (env.SAUCE_USERNAME && env.SAUCE_ACCESS_KEY) {
// correlate build/tunnel with Travis
sauceConfig = {
build: 'TRAVIS #' + env.TRAVIS_BUILD_NUMBER +
' (' + env.TRAVIS_BUILD_ID + ')',
tunnelIdentifier: env.TRAVIS_JOB_NUMBER
tunnelIdentifier: env.TRAVIS_JOB_NUMBER,
startConnect: false
};
console.error('Configured SauceLabs');
} else {
console.error('No SauceLabs credentials present');
}
}
} else if (env.APPVEYOR) {
console.error('AppVeyor detected');
Expand All @@ -100,9 +109,11 @@ module.exports = function (config) {
bundleDirpath = path.join(baseBundleDirpath, 'local');
// don't need to run sauce from appveyor b/c travis does it.
if (env.SAUCE_USERNAME || env.SAUCE_ACCESS_KEY) {
var id = require('os').hostname() + ' (' + Date.now() + ')';
sauceConfig = {
build: require('os')
.hostname() + ' (' + Date.now() + ')'
build: id,
tunnelIdentifier: id,
startConnect: true
};
console.error('Configured SauceLabs');
} else {
Expand Down Expand Up @@ -140,31 +151,37 @@ module.exports = function (config) {
};

function addSauceTests (cfg) {
var env = process.env;
cfg.reporters.push('saucelabs');
cfg.customLaunchers = {};
cfg.customLaunchers[env.BROWSER] = {
var browsers = Object.keys(browserPlatformPairs);
cfg.browsers = cfg.browsers.concat(browsers);
cfg.customLaunchers = browsers.reduce(function (acc, browser) {
var platform = browserPlatformPairs[browser];
var browserParts = browser.split('@');
var browserName = browserParts[0];
var version = browserParts[1];
acc[browser] = {
base: 'SauceLabs',
browserName: env.BROWSER.split('@')[0],
version: env.BROWSER.split('@')[1],
platform: env.PLATFORM
browserName: browserName,
version: version,
platform: platform
};
cfg.browsers = [env.BROWSER];
return acc;
}, {});

// See https://github.com/karma-runner/karma-sauce-launcher
// See https://github.com/bermi/sauce-connect-launcher#advanced-usage
cfg.sauceLabs = {
Object.assign(cfg.sauceLabs, {
public: 'public',
startConnect: true,
connectOptions: {
connectRetries: 10,
connectRetryTimeout: 60000
connectRetries: 2,
connectRetryTimeout: 30000,
detached: cfg.sauceLabs.startConnect,
tunnelIdentifier: cfg.sauceLabs.tunnelIdentifier
}
};

cfg.concurrency = 5;
});

cfg.retryLimit = 5;
cfg.concurrency = Infinity;
cfg.retryLimit = 1;

// for slow browser booting, ostensibly
cfg.captureTimeout = 120000;
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^3.0.1",
"expect.js": "^0.3.1",
"get-port": "^3.2.0",
"karma": "1.3.0",
"karma-browserify": "^5.0.5",
"karma-chrome-launcher": "^2.0.0",
Expand Down
14 changes: 11 additions & 3 deletions test/node-unit/http.spec.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
'use strict';

var http = require('http');
var getPort = require('get-port');

var server = http.createServer(function (req, res) {
res.end('Hello World\n');
});

server.listen(8888);

describe('http', function () {
var port;

before(function () {
return getPort().then(function (p) {
port = p;
server.listen(port);
});
});

it('should provide an example', function (done) {
http.get({ path: '/', port: 8888 }, function (res) {
http.get({ path: '/', port: port }, function (res) {
expect(res).to.have.property('statusCode', 200);
done();
});
Expand Down

0 comments on commit 918d78a

Please sign in to comment.