diff --git a/lib/_patch/jasmine-jsreporter.js b/lib/_patch/jasmine-jsreporter.js index 67eeea3..76ccc0e 100644 --- a/lib/_patch/jasmine-jsreporter.js +++ b/lib/_patch/jasmine-jsreporter.js @@ -75,10 +75,7 @@ description : specs[i].description, durationSec : specs[i].durationSec, passed : specs[i].results().passedCount === specs[i].results().totalCount, - skipped : specs[i].results().skipped, - passedCount : specs[i].results().passedCount, - failedCount : specs[i].results().failedCount, - totalCount : specs[i].results().totalCount + results : specs[i].results() }; suiteData.passed = !suiteData.specs[i].passed ? false : suiteData.passed; suiteData.durationSec += suiteData.specs[i].durationSec; diff --git a/lib/_patch/jasmine-plugin.js b/lib/_patch/jasmine-plugin.js index 55687f0..cd45520 100644 --- a/lib/_patch/jasmine-plugin.js +++ b/lib/_patch/jasmine-plugin.js @@ -3,8 +3,10 @@ for (var i = 0; i < suite.specs.length; ++i) { if (suite.specs[i].passed){ results.passed++; + } + else if(suite.specs[i].results.skipped) { + results.skipped++; } else { - results.tracebacks.push(suite.specs[i].description); results.failed++; } } @@ -26,7 +28,7 @@ results.total = 0; results.passed = 0; results.failed = 0; - results.tracebacks = []; + results.skipped = 0; for (var i = 0; i < report.suites.length; ++i) { if (report.suites[i]) { @@ -34,9 +36,10 @@ } } - results.total = results.passed + results.failed; + results.total = results.passed + results.failed + results.skipped; results.url = window.location.pathname; + results.report = report BrowserStack.post("/_report", results, function(){}); clearInterval(checker); } diff --git a/lib/server.js b/lib/server.js index 5ee0af7..f01d7e0 100644 --- a/lib/server.js +++ b/lib/server.js @@ -39,6 +39,104 @@ exports.Server = function Server(bsClient, workers, config, callback) { return browserReport; } + function reformatJasmineReport(browserReport) { + var results = browserReport.suites; + browserReport.tests = browserReport.tests || [ ]; + browserReport.suites = { + fullName : [ ], + childSuites : [ ], + tests : [ ], + status : !results.failed ? 'passed' : 'failed', + testCounts : { + passed : results.passed, + failed : results.failed, + skipped : results.skipped, + total : results.total, + }, + runtime : results.runtime + }; + function recurseThroughSuites(jasmineSuite, par) { + if(!jasmineSuite) { + return; + } + var suite = { + name : jasmineSuite.description, + fullName: [ ], + childSuites : [ ], + tests: [ ], + status : jasmineSuite.passed ? 'passed' : 'failed', + testCounts : { + passed : 0, + failed : 0, + skipped: 0, + total: 0 + }, + runtime: 0 + }; + if(par.name) { + suite.fullName.push(par.name); + } + suite.fullName.push(jasmineSuite.description); + jasmineSuite.specs.forEach(function(spec) { + var test = { + name : spec.description, + suiteName : suite.decription, + fullName : [ + ], + status : spec.passed ? 'passed' : (spec.results.skipped ? 'skipped' : 'failed'), + runtime : spec.durationSec, + errors : [ ], + assertions : [ ] + }; + Array.prototype.push.apply(test.fullName, suite.fullName); + test.fullName.push(spec.description); + if(!spec.passed) { + spec.results.items_.forEach(function(jasmineItem) { + if(!jasmineItem.passed_) { + var detail = { + passed : false + }; + if('message' in jasmineItem) { + detail.message = jasmineItem.message; + } + if('actual' in jasmineItem) { + detail.actual = jasmineItem.actual; + } + if('expected' in jasmineItem) { + detail.expected = jasmineItem.expected; + } + if('trace' in jasmineItem) { + detail.stack = jasmineItem.trace.message || jasmineItem.trace.stack; + } + test.errors.push(detail); + test.assertions.push(detail); + } + }); + } + suite.tests.push(test); + browserReport.tests.push(test); + if(spec.passed) { + ++suite.testCounts.passed; + } + else if(spec.skipped) { + ++suite.testCounts.skipped; + } + else { + ++suite.testCounts.failed; + } + ++suite.testCounts.total; + suite.runtime += spec.durationSec; + }); + jasmineSuite.suites.forEach(function(childSuite) { + recurseThroughSuites(childSuite, suite); + }); + par.childSuites.push(suite); + } + results.report.suites.forEach(function(jasmineSuite) { + recurseThroughSuites(jasmineSuite, browserReport.suites); + }); + } + function handleFile(filename, request, response, doNotUseProxy) { var url_parts = url.parse(request.url, true); var query = url_parts.query; @@ -293,6 +391,7 @@ exports.Server = function Server(bsClient, workers, config, callback) { color = ( query.total !== query.passed ) ? 'red' : 'green'; logger.info('[%s] ' + chalk[color](( query.total !== query.passed ) ? 'Failed:' : 'Passed:') + ' %d tests, %d passed, %d failed; ran for %dms', browserInfo, query.total, query.passed, query.failed, query.runtime); config.status += query.failed; + reformatJasmineReport(browserReport); } else if(query.testCounts) { color = query.status === 'failed' ? 'red' : 'green'; logger.info('[%s] ' + chalk[color](query.status === 'failed' ? 'Failed:' : 'Passed:') + ' %d tests, %d passed, %d failed, %d skipped; ran for %dms', browserInfo, query.testCounts.total, query.testCounts.passed, query.testCounts.failed, query.testCounts.skipped, query.runtime); diff --git a/tests/external-tests.js b/tests/external-tests.js index afc6120..590ed30 100755 --- a/tests/external-tests.js +++ b/tests/external-tests.js @@ -131,9 +131,9 @@ var repositories = [ browsers: [ { 'browser': 'safari', - 'browser_version': '5.1', + 'browser_version': '9.0', 'os': 'OS X', - 'os_version': 'Snow Leopard' + 'os_version': 'El Capitan' } ], test_path: [