Skip to content
This repository was archived by the owner on Jun 14, 2019. It is now read-only.

Commit e440c6a

Browse files
committed
feat(): add automatic tests at SauceLabs, for the latest browsers
1 parent 88d590c commit e440c6a

File tree

4 files changed

+192
-18
lines changed

4 files changed

+192
-18
lines changed

.travis.yml

+16-6
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,19 @@ after_script:
1515
- if [ "$TEST_SCOPE" == "" ]; then npm install -g codeclimate-test-reporter && codeclimate-test-reporter < build/coverage/report/lcov.info; fi
1616

1717
env:
18-
- TEST_SCOPE=
19-
- TEST_SCOPE=angular_1.2.x
20-
- TEST_SCOPE=angular_1.3.x
21-
- TEST_SCOPE=angular_1.4.x
22-
- TEST_SCOPE=angular_1.5.x
23-
- TEST_SCOPE=angular_1.6.x
18+
matrix:
19+
- TEST_SCOPE=
20+
- TEST_SCOPE= SAUCE_ENABLED=$_SAUCE_ENABLED SAUCE_USERNAME=$_SAUCE_USERNAME SAUCE_ACCESS_KEY=$_SAUCE_ACCESS_KEY
21+
- TEST_SCOPE=angular_1.2.x
22+
- TEST_SCOPE=angular_1.3.x
23+
- TEST_SCOPE=angular_1.4.x
24+
- TEST_SCOPE=angular_1.5.x
25+
- TEST_SCOPE=angular_1.6.x
26+
global:
27+
- secure: "BQeu14UTGr7gWrEz9O2NSDb4g4F40dWw2QKgglkLX58VmJYZn6anQLIavotmNr9XEG7car8lWkxuDrcQEbUvp/nunhSd2EvDn3fZwI5lLAfuWwvGgAd37SRbD4xKykrzqmSNfH6jHAB+Zm5UcYPr127OzrEUY08ArEDj9lyhnkY="
28+
- secure: "oCZdWQUJcqiPpy9Izg+/TTP1KX1dvif3et+tSJQSYXEm0bgWvQXV9QA9YE8s1ixVpWIN4Gt4/p6lNYonxtf9mb7rNUe4nLznFcD5oMAjJSN668mNJZ/lPfh+lINCtxlqtwgtcCllXWdhNEAIPEIsx3JeN1zrcS5oEoh1I3u1n8k="
29+
- secure: "oR1sfCFm+wgbCfE6uMyx5D1g9HfXW1F4umCsBSd/1ef5ccore78y+HicBCSqhLQqGLolmBraZWRjpgeykoslozQP6GYMplNpuqZtQuomuSu53b2qFvr9NyDWNuE7xJ4hPCtATkiB/JZrqUTSnzpgnU+pn01mPxyaQsUpwYC9hqM="
30+
31+
matrix:
32+
allow_failures:
33+
- env: TEST_SCOPE= SAUCE_ENABLED=$_SAUCE_ENABLED SAUCE_USERNAME=$_SAUCE_USERNAME SAUCE_ACCESS_KEY=$_SAUCE_ACCESS_KEY

README.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# angular-vertxbus
22

3-
![Bower version](https://img.shields.io/bower/v/angular-vertxbus.svg) [![npm version](https://img.shields.io/npm/v/angular-vertxbus.svg)](https://www.npmjs.com/package/angular-vertxbus) [![cdnjs](https://img.shields.io/cdnjs/v/angular-vertxbus.svg)](https://cdnjs.com/libraries/angular-vertxbus) [![Build Status](https://img.shields.io/travis/knalli/angular-vertxbus.svg)](https://travis-ci.org/knalli/angular-vertxbus) [![Built with Grunt](https://cdn.gruntjs.com/builtwith.svg)](http://gruntjs.com/) [![Greenkeeper badge](https://badges.greenkeeper.io/knalli/angular-vertxbus.svg)](https://greenkeeper.io/)
3+
![Bower version](https://img.shields.io/bower/v/angular-vertxbus.svg) [![npm version](https://img.shields.io/npm/v/angular-vertxbus.svg)](https://www.npmjs.com/package/angular-vertxbus) [![cdnjs](https://img.shields.io/cdnjs/v/angular-vertxbus.svg)](https://cdnjs.com/libraries/angular-vertxbus) [![Build Status](https://img.shields.io/travis/knalli/angular-vertxbus.svg)](https://travis-ci.org/knalli/angular-vertxbus) [![Sauce Test Status](https://saucelabs.com/buildstatus/knalli-angular-vertxbus)](https://saucelabs.com/u/knalli-angular-vertxbus) [![Built with Grunt](https://cdn.gruntjs.com/builtwith.svg)](http://gruntjs.com/) [![Greenkeeper badge](https://badges.greenkeeper.io/knalli/angular-vertxbus.svg)](https://greenkeeper.io/)
44

55
Client side library using VertX Event Bus as an Angular Service module
66

@@ -11,6 +11,10 @@ Client side library using VertX Event Bus as an Angular Service module
1111
| Canary | unstable | [![Build Status](https://travis-ci.org/knalli/angular-vertxbus.svg?branch=canary)](https://travis-ci.org/knalli/angular-vertxbus) |
1212
| Master | stable | [![Build Status](https://travis-ci.org/knalli/angular-vertxbus.svg?branch=master)](https://travis-ci.org/knalli/angular-vertxbus) |
1313

14+
Automatic tests running against the latest version of the major browsers:
15+
16+
[![Sauce Test Status](https://saucelabs.com/browser-matrix/knalli-angular-vertxbus.svg)](https://saucelabs.com/u/knalli-angular-vertxbus)
17+
1418

1519
## How to get
1620

karma.conf.js

+169-11
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
const fs = require('fs');
55
const path = require('path');
66
const webpack = require('webpack');
7+
const browserslist = require('browserslist');
78

89
var AVAILABLE_SCOPES = [], isValidScope, injectByScope, getAffectiveScope, isDefaultScope;
910

@@ -34,11 +35,108 @@ var AVAILABLE_SCOPES = [], isValidScope, injectByScope, getAffectiveScope, isDef
3435
};
3536
})();
3637

38+
/**
39+
* Configuration set for SauceLabs browser tests
40+
* @type {{enabled, launchers, buildOptions}}
41+
*/
42+
const sourcelabsConfig = ((browsers) => {
43+
44+
const enabled = !!process.env.SAUCE_ENABLED;
45+
46+
// parse list of browsers (by browserslist) and build a useful list
47+
const launchers = browsers
48+
.map((string) => {
49+
let [name, version] = string.split(' ');
50+
return {
51+
name,
52+
version,
53+
};
54+
})
55+
.filter(browser => {
56+
switch (browser.name) {
57+
case 'chrome':
58+
case 'edge':
59+
case 'firefox':
60+
case 'ie':
61+
case 'opera':
62+
case 'safari':
63+
return true;
64+
default:
65+
return false;
66+
}
67+
})
68+
.map(browser => {
69+
switch (browser.name) {
70+
case 'chrome':
71+
return {
72+
id : `sl_${browser.name}_${browser.version}`,
73+
base : 'SauceLabs',
74+
browserName : browser.name,
75+
platform : 'Windows 7',
76+
version : browser.version
77+
};
78+
case 'firefox':
79+
return {
80+
id : `sl_${browser.name}_${browser.version}`,
81+
base : 'SauceLabs',
82+
browserName : browser.name,
83+
platform : 'Windows 7',
84+
version : browser.version
85+
};
86+
case 'ie':
87+
return {
88+
id : `sl_${browser.name}_${browser.version}`,
89+
base : 'SauceLabs',
90+
browserName : 'internet explorer',
91+
platform : 'Windows 7',
92+
version : browser.version
93+
};
94+
case 'edge':
95+
return {
96+
id : `sl_${browser.name}_${browser.version}`,
97+
base : 'SauceLabs',
98+
browserName : 'microsoftedge',
99+
platform : 'Windows 10',
100+
version : browser.version
101+
};
102+
case 'safari':
103+
// skip 9
104+
if (browser.version.substring(0, 1) === '9') {
105+
break;
106+
}
107+
return {
108+
id : `sl_${browser.name}_${browser.version}`,
109+
base : 'SauceLabs',
110+
browserName : browser.name,
111+
platform : 'macOS 10.12',
112+
version : browser.version
113+
};
114+
}
115+
})
116+
.filter(browser => browser);
117+
118+
const buildOptions = (scope) => {
119+
return {
120+
testName : `angular-vertxbus Unit Tests, scope: ${scope}`,
121+
verbose : true,
122+
doctor : true,
123+
logger : console.log
124+
};
125+
};
126+
127+
return {
128+
enabled,
129+
launchers,
130+
buildOptions,
131+
};
132+
})(browserslist('last 2 versions, Firefox ESR'));
133+
37134
module.exports = function (config) {
38135

39-
var scope = process.env.TEST_SCOPE;
136+
const scope = process.env.TEST_SCOPE;
137+
const actualScope = getAffectiveScope(scope);
40138
console.log('Available test scopes: ', AVAILABLE_SCOPES);
41-
console.log('Currently selected scope: ', getAffectiveScope(scope));
139+
console.log('Currently selected scope: ', actualScope);
42140

43141
var vertxEventBusFile = injectByScope(scope, 'vertx3-eventbus-client/vertx-eventbus.js');
44142

@@ -54,12 +152,50 @@ module.exports = function (config) {
54152

55153
frameworks : ['expect', 'mocha', 'jasmine'],
56154

57-
reporters : isDefaultScope(scope) ? ['progress', 'coverage'] : ['progress'],
155+
reporters : (() => {
156+
let reporters = ['progress'];
157+
if (isDefaultScope(scope)) {
158+
reporters.push('coverage');
159+
}
160+
if (sourcelabsConfig.enabled) {
161+
reporters.push('saucelabs');
162+
}
163+
return reporters;
164+
})(),
58165

59166
preprocessors : {
60167
'test/unit/test_index.js' : ['webpack'],
61168
},
62169

170+
// SourceLabs
171+
// https://oligofren.wordpress.com/2014/05/27/running-karma-tests-on-browserstack/
172+
// http://stackoverflow.com/questions/24093155/karma-sauce-launcher-disconnects-every-test-run-resulting-in-failed-runs-with-ie
173+
sauceLabs : ((scope) => {
174+
if (sourcelabsConfig.enabled) {
175+
return sourcelabsConfig.buildOptions(scope);
176+
}
177+
})(actualScope),
178+
customLaunchers : (() => {
179+
if (sourcelabsConfig.enabled) {
180+
return sourcelabsConfig.launchers;
181+
}
182+
})(),
183+
browserDisconnectTimeout : (() => {
184+
if (sourcelabsConfig.enabled) {
185+
return 10000; // default 2000
186+
}
187+
})(),
188+
browserDisconnectTolerance : (() => {
189+
if (sourcelabsConfig.enabled) {
190+
return 1; // default 0
191+
}
192+
})(),
193+
browserNoActivityTimeout : (() => {
194+
if (sourcelabsConfig.enabled) {
195+
return 5 * 60 * 1000; // default 10000
196+
}
197+
})(),
198+
63199
webpack : {
64200
devtool : 'source-map',
65201
//entry: [],
@@ -124,13 +260,15 @@ module.exports = function (config) {
124260
noInfo : true
125261
},
126262

127-
coverageReporter : isDefaultScope(scope)
128-
? {
129-
dir : 'build/coverage',
130-
subdir : 'report',
131-
type : 'lcov'
263+
coverageReporter : (() => {
264+
if (isDefaultScope(scope)) {
265+
return {
266+
dir : 'build/coverage',
267+
subdir : 'report',
268+
type : 'lcov'
269+
};
132270
}
133-
: undefined,
271+
})(),
134272

135273
// web server port
136274
port : 9876,
@@ -156,10 +294,30 @@ module.exports = function (config) {
156294
// - Safari (only Mac)
157295
// - PhantomJS
158296
// - IE (only Windows)
159-
browsers : process.env.WATCH ? [] : [process.env.TRAVIS ? 'Firefox' : 'Chrome'],
297+
browsers : (() => {
298+
if (process.env.WATCH) {
299+
return [];
300+
}
301+
302+
let browsers = [];
303+
if (sourcelabsConfig.enabled) {
304+
browsers = [...browsers, ...Object.keys(sourcelabsConfig.launchers)];
305+
} else if (process.env.TRAVIS) {
306+
browsers.push('Firefox');
307+
} else {
308+
browsers.push('Chrome');
309+
}
310+
return browsers;
311+
})(),
160312

161313
// If browser does not capture in given timeout [ms], kill it
162-
captureTimeout : 60000,
314+
captureTimeout : (() => {
315+
if (sourcelabsConfig.enabled) {
316+
return 5 * 60 * 1000; // default 60000
317+
} else {
318+
return 1 * 60 * 1000;
319+
}
320+
})(),
163321

164322
// Continuous Integration mode
165323
// if true, it capture browsers, run tests and exit

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
"babel-polyfill": "^6.0.14",
6060
"babel-preset-env": "^1.2.0",
6161
"bower": "1.8.0",
62+
"browserslist": "^1.7.6",
6263
"eslint": "^3.1.1",
6364
"eslint-loader": "^1.6.1",
6465
"eslint-plugin-angular": "^1.5.1",
@@ -86,6 +87,7 @@
8687
"karma-jasmine": "^1.1.0",
8788
"karma-mocha": "^1.0.1",
8889
"karma-phantomjs-launcher": "^1.0.0",
90+
"karma-sauce-launcher": "^1.1.0",
8991
"karma-sourcemap-loader": "^0.3.7",
9092
"karma-webpack": "^2.0.2",
9193
"load-grunt-tasks": "^3.3.0",

0 commit comments

Comments
 (0)