Skip to content

Commit 6536e60

Browse files
committed
test(karma): reconfigure karma to run in 4 descrete modes
This reconfigures Karma for various CI tasks to run in 4 descrete modes. - Run locally, this will detect which browsers are available and run them. - Run in AppVeyor, this will run `Firefox`, `ChromeHeadless` and `IE`(11) (which are available on all AppVeyor VMs) - Run in Travis, this will run `FirefoxHeadless` and `ChromeHeadless` (which are both available in Travis with some config) - Run with saucelabs environment vars, it will run Safari, Edge and IE10
1 parent ecb508b commit 6536e60

File tree

2 files changed

+79
-76
lines changed

2 files changed

+79
-76
lines changed

karma.conf.js

Lines changed: 71 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,81 @@
1-
/* eslint-disable no-process-env */
21
const packageJson = require('./package.json');
3-
const defaultTimeout = 120000;
2+
let browsers = [ 'ChromeHeadless' ];
3+
let build = 'localbuild';
4+
let branch = 'local';
5+
let job = Date.now();
6+
let startConnect = false;
7+
const reporters = [ 'progress', 'coverage' ];
8+
const tags = [
9+
`${ packageJson.name }@${ packageJson.version }`,
10+
];
11+
const frameworks = [ 'mocha' ];
12+
13+
/* eslint-disable no-process-env */
14+
const debug = Boolean(process.env.npm_config_debug);
15+
if (process.env.SAUCE_ACCESS_KEY && process.env.SAUCE_USERNAME) {
16+
browsers = [ 'SauceEdgeLatest', 'SauceInternetExplorerTen', 'SauceSafariLatest' ];
17+
tags.push(`${ process.env.SAUCE_USERNAME }@${ branch }`);
18+
reporters.push('saucelabs');
19+
} else if (process.env.APPVEYOR) {
20+
browsers = [ 'Firefox', 'ChromeHeadless', 'IE' ];
21+
branch = process.env.APPVEYOR_REPO_BRANCH;
22+
job = process.env.APPVEYOR_JOB_NUMBER;
23+
build = `appveyor@${ process.env.APPVEYOR_JOB_NUMBER }`;
24+
} else if (process.env.TRAVIS) {
25+
browsers = [ 'FirefoxHeadless', 'ChromeHeadless' ];
26+
branch = process.env.TRAVIS_BRANCH;
27+
job = process.env.TRAVIS_JOB_NUMBER;
28+
build = `travis@${ process.env.TRAVIS_JOB_NUMBER }`;
29+
startConnect = true;
30+
} else {
31+
browsers = [];
32+
frameworks.push('detectBrowsers');
33+
}
34+
/* eslint-enable */
35+
36+
tags.push(build);
437
module.exports = function configureKarma(config) {
5-
const localBrowsers = [
6-
'PhantomJS',
7-
];
8-
const sauceLabsBrowsers = {
9-
SauceChromeLatest: {
10-
base: 'SauceLabs',
11-
browserName: 'Chrome',
12-
},
13-
SauceFirefoxLatest: {
14-
base: 'SauceLabs',
15-
browserName: 'Firefox',
16-
},
17-
SauceSafariLatest: {
18-
base: 'SauceLabs',
19-
browserName: 'Safari',
20-
platform: 'OS X 10.11',
21-
},
22-
SauceInternetExplorerLatest: {
23-
base: 'SauceLabs',
24-
browserName: 'Internet Explorer',
25-
},
26-
SauceInternetExplorerOldestSupported: {
27-
base: 'SauceLabs',
28-
browserName: 'Internet Explorer',
29-
version: 9,
30-
},
31-
SauceEdgeLatest: {
32-
base: 'SauceLabs',
33-
browserName: 'MicrosoftEdge',
34-
},
35-
SauceAndroidLatest: {
36-
base: 'SauceLabs',
37-
browserName: 'Android',
38-
},
39-
};
4038
config.set({
4139
basePath: '',
42-
browsers: localBrowsers,
43-
logLevel: process.env.npm_config_debug ? config.LOG_DEBUG : config.LOG_INFO,
44-
frameworks: [ 'mocha' ],
45-
files: [ 'type-detect.test.js' ],
46-
exclude: [],
47-
reporters: [ 'progress', 'coverage' ],
40+
browsers,
41+
singleRun: true,
42+
logLevel: debug ? config.LOG_DEBUG : config.LOG_INFO,
43+
frameworks,
44+
files: [ `${ packageJson.name }.test.js` ],
45+
reporters,
4846
coverageReporter: {
4947
type: 'lcov',
5048
dir: 'coverage',
5149
},
52-
port: 9876,
53-
colors: true,
54-
concurrency: 3,
55-
autoWatch: false,
56-
captureTimeout: defaultTimeout,
57-
browserDisconnectTimeout: defaultTimeout,
58-
browserNoActivityTimeout: defaultTimeout,
59-
singleRun: true,
60-
});
61-
62-
if (process.env.SAUCE_ACCESS_KEY && process.env.SAUCE_USERNAME) {
63-
const branch = process.env.TRAVIS_BRANCH || 'local';
64-
let build = 'localbuild';
65-
if (process.env.TRAVIS_JOB_NUMBER) {
66-
build = `travis@${ process.env.TRAVIS_JOB_NUMBER }`;
67-
}
68-
config.reporters.push('saucelabs');
69-
config.set({
70-
customLaunchers: sauceLabsBrowsers,
71-
browsers: localBrowsers.concat(Object.keys(sauceLabsBrowsers)),
72-
sauceLabs: {
73-
testName: packageJson.name,
74-
tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER || new Date().getTime(),
75-
recordVideo: true,
76-
startConnect: ('TRAVIS' in process.env) === false,
77-
tags: [
78-
`typeDetect_${ packageJson.version }`,
79-
`${ process.env.SAUCE_USERNAME }@${ branch }`,
80-
build,
81-
],
50+
customLaunchers: {
51+
FirefoxHeadless: {
52+
base: 'Firefox',
53+
flags: [ '-headless' ],
54+
},
55+
SauceSafariLatest: {
56+
base: 'SauceLabs',
57+
browserName: 'Safari',
58+
platform: 'OS X 10.11',
59+
},
60+
SauceInternetExplorerTen: {
61+
base: 'SauceLabs',
62+
browserName: 'Internet Explorer',
63+
version: 10,
8264
},
83-
});
84-
}
65+
SauceEdgeLatest: {
66+
base: 'SauceLabs',
67+
browserName: 'MicrosoftEdge',
68+
},
69+
},
70+
detectBrowsers: {
71+
enabled: true,
72+
usePhantomJS: false,
73+
},
74+
sauceLabs: {
75+
testName: packageJson.name,
76+
tunnelIdentifier: job,
77+
startConnect,
78+
tags,
79+
},
80+
});
8581
};

package.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,16 @@
6060
"eslint-plugin-filenames": "^1.2.0",
6161
"husky": "^0.13.4",
6262
"karma": "^1.7.1",
63+
"karma-chrome-launcher": "^2.2.0",
6364
"karma-coverage": "^1.1.1",
65+
"karma-detect-browsers": "^2.2.5",
66+
"karma-edge-launcher": "^0.4.2",
67+
"karma-firefox-launcher": "^1.0.1",
68+
"karma-ie-launcher": "^1.0.0",
6469
"karma-mocha": "^1.3.0",
65-
"karma-phantomjs-launcher": "^1.0.0",
70+
"karma-opera-launcher": "^1.0.0",
71+
"karma-safari-launcher": "^1.0.0",
72+
"karma-safaritechpreview-launcher": "0.0.6",
6673
"karma-sauce-launcher": "^1.2.0",
6774
"lcov-result-merger": "^1.2.0",
6875
"mocha": "^3.5.1",

0 commit comments

Comments
 (0)