karma-sauce-launcher
Advanced tools
Comparing version 0.1.3 to 0.1.4
73
index.js
@@ -9,3 +9,10 @@ // TODO(vojta): | ||
// SauceLabs is a wrapper around the Sauce Labs REST API | ||
var SauceLabs = require('saucelabs'); | ||
// We keep a mapping from Karma launch IDs to Sauce job IDs here, to report the pass/fail results. | ||
// We also keep the Sauce credentials here - theoretically different credentials can be used for | ||
// different browsers in the same session. | ||
var jobMapping = {}; | ||
var SauceConnect = function(emitter, logger) { | ||
@@ -115,3 +122,3 @@ var log = logger.create('launcher.sauce'); | ||
driver = wd.remote('ondemand.saucelabs.com', 80, username, accessKey); | ||
driver.init(options, function(err) { | ||
driver.init(options, function(err, jobId) { | ||
if (err) { | ||
@@ -122,2 +129,11 @@ log.error('Can not start %s\n %s', browserName, formatSauceError(err)); | ||
// Record the job details, so we can access it later with the reporter | ||
jobMapping[id] = { | ||
jobId: jobId, | ||
credentials: { | ||
username: username, | ||
password: accessKey | ||
} | ||
}; | ||
log.info('%s session at https://saucelabs.com/tests/%s', browserName, driver.sessionID); | ||
@@ -165,7 +181,60 @@ log.debug('WebDriver channel instantiated, opening ' + url); | ||
var SauceLabsReporter = function(baseReporterDecorator, emitter, logger) { | ||
var log = logger.create('reporter.sauce'); | ||
baseReporterDecorator(this); | ||
var pendingUpdates = 0; | ||
var updatesFinished = function() {}; | ||
// We're only interested in the final results per browser | ||
this.onBrowserComplete = function(browser) { | ||
var result = browser.lastResult; | ||
// browser.launchId was used until v0.10.2, but changed to just browser.id in v0.11.0 | ||
var browserId = browser.launchId || browser.id; | ||
if(browserId in jobMapping) { | ||
var jobDetails = jobMapping[browserId]; | ||
var sauceApi = new SauceLabs(jobDetails.credentials); | ||
// We record pass/fail status, as well as the full results in "custom-data". | ||
var payload = { | ||
passed: !(result.failed || result.error), | ||
'custom-data': result | ||
}; | ||
pendingUpdates++; | ||
sauceApi.updateJob(jobDetails.jobId, payload, function(err) { | ||
pendingUpdates--; | ||
if (err) { | ||
log.error('Failed record pass/fail status: %s', err.error); | ||
} | ||
if (pendingUpdates == 0) { | ||
updatesFinished(); | ||
} | ||
}); | ||
} | ||
}; | ||
// Wait until all updates have been pushed to SauceLabs | ||
emitter.on('exit', function(done) { | ||
if (pendingUpdates) { | ||
updatesFinished = done; | ||
} else { | ||
done(); | ||
} | ||
}); | ||
}; | ||
SauceLabsReporter.$inject = ['baseReporterDecorator', 'emitter', 'logger']; | ||
// PUBLISH DI MODULE | ||
module.exports = { | ||
'sauceConnect': ['type', SauceConnect], | ||
'launcher:SauceLabs': ['type', SauceLabsBrowser] | ||
'launcher:SauceLabs': ['type', SauceLabsBrowser], | ||
'reporter:saucelabs': ['type', SauceLabsReporter] | ||
}; |
{ | ||
"name": "karma-sauce-launcher", | ||
"version": "0.1.3", | ||
"version": "0.1.4", | ||
"description": "A Karma plugin. Launch any browser on SauceLabs!", | ||
@@ -24,3 +24,4 @@ "main": "index.js", | ||
"sauce-connect-launcher": "~0.1.10", | ||
"q": "~0.9.6" | ||
"q": "~0.9.6", | ||
"saucelabs": "~0.1.0" | ||
}, | ||
@@ -41,4 +42,5 @@ "peerDependencies": { | ||
"Parashuram <code@nparashuram.com>", | ||
"Ralf Kistner <ralf@embarkmobile.com>", | ||
"yhwh <ferrero.nicolas@gmail.com>" | ||
] | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
11153
193
5
+ Addedsaucelabs@~0.1.0
+ Addedsaucelabs@0.1.1(transitive)