@@ -48,7 +48,7 @@ module.exports = function (config) {
4848 } ,
4949 reporters : [ 'spec' ] ,
5050 colors : true ,
51- browsers : [ osName ( ) === 'macOS Sierra' ? 'Chrome' : 'PhantomJS' ] ,
51+ browsers : [ osName ( ) === 'macOS Sierra' ? 'Chrome' : 'PhantomJS' ] , // This is the default browser to run, locally
5252 logLevel : config . LOG_INFO ,
5353 client : {
5454 mocha : {
@@ -58,8 +58,17 @@ module.exports = function (config) {
5858 } ;
5959
6060 // see https://github.com/saucelabs/karma-sauce-example
61+
62+ // We define the browser to run on the Saucelabs Infrastructure
63+ // via the environment variables BROWSER and PLATFORM.
64+ // PLATFORM is e.g. "Windows"
65+ // BROWSER is expected to be in the format "<name>@<version>",
66+ // e.g. "MicrosoftEdge@latest"
67+ // See https://wiki.saucelabs.com/display/DOCS/Platform+Configurator#/
68+ // for available browsers.
69+
6170 // TO RUN LOCALLY, execute:
62- // `CI=1 SAUCE_USERNAME=<user> SAUCE_ACCESS_KEY=<key> make test-browser`
71+ // `CI=1 SAUCE_USERNAME=<user> SAUCE_ACCESS_KEY=<key> BROWSER=<browser> PLATFORM=<platform> make test-browser`
6372 var env = process . env ;
6473 var sauceConfig ;
6574
@@ -68,16 +77,18 @@ module.exports = function (config) {
6877 if ( env . TRAVIS ) {
6978 console . error ( 'Travis-CI detected' ) ;
7079 bundleDirpath = path . join ( baseBundleDirpath , process . env . TRAVIS_BUILD_ID ) ;
71- if ( env . SAUCE_USERNAME && env . SAUCE_ACCESS_KEY ) {
72- // correlate build/tunnel with Travis
73- sauceConfig = {
74- build : 'TRAVIS #' + env . TRAVIS_BUILD_NUMBER +
75- ' (' + env . TRAVIS_BUILD_ID + ')' ,
76- tunnelIdentifier : env . TRAVIS_JOB_NUMBER
77- } ;
78- console . error ( 'Configured SauceLabs' ) ;
79- } else {
80- console . error ( 'No SauceLabs credentials present' ) ;
80+ if ( env . BROWSER && env . PLATFORM ) {
81+ if ( env . SAUCE_USERNAME && env . SAUCE_ACCESS_KEY ) {
82+ // correlate build/tunnel with Travis
83+ sauceConfig = {
84+ build : 'TRAVIS #' + env . TRAVIS_BUILD_NUMBER +
85+ ' (' + env . TRAVIS_BUILD_ID + ')' ,
86+ tunnelIdentifier : env . TRAVIS_JOB_NUMBER
87+ } ;
88+ console . error ( 'Configured SauceLabs' ) ;
89+ } else {
90+ console . error ( 'No SauceLabs credentials present' ) ;
91+ }
8192 }
8293 } else if ( env . APPVEYOR ) {
8394 console . error ( 'AppVeyor detected' ) ;
@@ -126,56 +137,32 @@ module.exports = function (config) {
126137} ;
127138
128139function addSauceTests ( cfg ) {
140+ var env = process . env ;
129141 cfg . reporters . push ( 'saucelabs' ) ;
130-
131- cfg . customLaunchers = {
132- ie8 : {
133- base : 'SauceLabs' ,
134- browserName : 'internet explorer' ,
135- platform : 'Windows 7' ,
136- version : '8.0'
137- } ,
138- ie7 : {
139- base : 'SauceLabs' ,
140- browserName : 'internet explorer' ,
141- platform : 'Windows XP' ,
142- version : '7.0'
143- } ,
144- chrome : {
145- base : 'SauceLabs' ,
146- browserName : 'chrome' ,
147- platform : 'Windows 8' ,
148- version : 'latest'
149- } ,
150- edge : {
151- base : 'SauceLabs' ,
152- browserName : 'MicrosoftEdge' ,
153- platform : 'Windows 10' ,
154- version : 'latest'
155- } ,
156- firefox : {
157- base : 'SauceLabs' ,
158- browserName : 'firefox' ,
159- platform : 'Windows 8.1' ,
160- version : 'latest'
161- } ,
162- safari : {
163- base : 'SauceLabs' ,
164- browserName : 'safari' ,
165- platform : 'OS X 10.11' ,
166- version : 'latest'
167- }
142+ cfg . customLaunchers = { } ;
143+ cfg . customLaunchers [ env . BROWSER ] = {
144+ base : 'SauceLabs' ,
145+ browserName : env . BROWSER . split ( '@' ) [ 0 ] ,
146+ version : env . BROWSER . split ( '@' ) [ 1 ] ,
147+ platform : env . PLATFORM
168148 } ;
149+ cfg . browsers = [ env . BROWSER ] ;
169150
170- cfg . browsers = cfg . browsers . concat ( Object . keys ( cfg . customLaunchers ) ) ;
171-
151+ // See https://github.com/karma-runner/karma-sauce-launcher
152+ // See https://github.com/bermi/sauce-connect-launcher#advanced-usage
172153 cfg . sauceLabs = {
173154 public : 'public' ,
174- startConnect : true
155+ startConnect : true ,
156+ connectOptions : {
157+ connectRetries : 10 ,
158+ connectRetryTimeout : 60000
159+ }
175160 } ;
176161
177162 cfg . concurrency = 5 ;
178163
164+ cfg . retryLimit = 5 ;
165+
179166 // for slow browser booting, ostensibly
180167 cfg . captureTimeout = 120000 ;
181168 cfg . browserNoActivityTimeout = 20000 ;
0 commit comments