HtmlReporter shows error alerts for afterAllExceptions

-Add list of exceptions in HtmlReporter to push to on error
-Create alerts for each exception in the list (with stack trace)

[#67055688]
This commit is contained in:
Christopher Amavisca and Greg Cobb
2014-03-06 15:39:04 -08:00
parent 6caf4c5de2
commit bed1c15ea4
5 changed files with 43 additions and 15 deletions

View File

@@ -46,7 +46,8 @@ jasmineRequire.HtmlReporter = function(j$) {
failureCount = 0, failureCount = 0,
pendingSpecCount = 0, pendingSpecCount = 0,
htmlReporterMain, htmlReporterMain,
symbols; symbols,
exceptionsList = [];
this.initialize = function() { this.initialize = function() {
htmlReporterMain = createDom('div', {className: 'html-reporter'}, htmlReporterMain = createDom('div', {className: 'html-reporter'},
@@ -94,7 +95,7 @@ jasmineRequire.HtmlReporter = function(j$) {
}; };
this.afterAllException = function(error) { this.afterAllException = function(error) {
console.error(error); exceptionsList.push(error);
}; };
var failures = []; var failures = [];
@@ -169,6 +170,12 @@ jasmineRequire.HtmlReporter = function(j$) {
var statusBarClassName = 'bar ' + ((failureCount > 0) ? 'failed' : 'passed'); var statusBarClassName = 'bar ' + ((failureCount > 0) ? 'failed' : 'passed');
alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage)); alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage));
exceptionsList.forEach(function(error) {
var errorBarMessage = 'An error was thrown in an afterAll: ' + error.stack;
var errorBarClassName = 'bar errored';
alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessage));
});
var results = find('.results'); var results = find('.results');
results.appendChild(summary); results.appendChild(summary);

View File

@@ -25,6 +25,7 @@ body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
.html-reporter .bar.failed { background-color: #ca3a11; } .html-reporter .bar.failed { background-color: #ca3a11; }
.html-reporter .bar.passed { background-color: #007069; } .html-reporter .bar.passed { background-color: #007069; }
.html-reporter .bar.skipped { background-color: #bababa; } .html-reporter .bar.skipped { background-color: #bababa; }
.html-reporter .bar.errored { background-color: #ca3a11; }
.html-reporter .bar.menu { background-color: #fff; color: #aaaaaa; } .html-reporter .bar.menu { background-color: #fff; color: #aaaaaa; }
.html-reporter .bar.menu a { color: #333333; } .html-reporter .bar.menu a { color: #333333; }
.html-reporter .bar a { color: white; } .html-reporter .bar a { color: white; }

View File

@@ -130,24 +130,33 @@ describe("New HtmlReporter", function() {
}); });
}); });
describe("when afterAllException is called", function () { describe("when there are afterAllExceptions", function () {
it("sends a console error", function(){ it("displays the exceptions in their own alert bars", function(){
var env = new j$.Env(), var env = new j$.Env(),
error = new Error('After all exception!'), container = document.createElement("div"),
container = document.createElement('div'), getContainer = function() { return container; },
getContainer = function () { return container; },
reporter = new j$.HtmlReporter({ reporter = new j$.HtmlReporter({
env: env, env: env,
getContainer: getContainer,
createElement: function() { return document.createElement.apply(document, arguments); }, createElement: function() { return document.createElement.apply(document, arguments); },
createTextNode: function() { return document.createTextNode.apply(document, arguments); }, createTextNode: function() { return document.createTextNode.apply(document, arguments); }
getContainer: getContainer }),
}); error = new Error('My After All Exception'),
otherError = new Error('My Other Exception');
reporter.initialize(); reporter.initialize();
spyOn(window.console, 'error'); reporter.jasmineStarted({});
reporter.afterAllException(error); reporter.afterAllException(error);
expect(window.console.error).toHaveBeenCalled(); reporter.afterAllException(otherError);
reporter.jasmineDone({});
var alertBars = container.querySelectorAll(".alert .bar");
expect(alertBars.length).toEqual(3);
expect(alertBars[1].innerHTML).toMatch(/My After All Exception/);
expect(alertBars[1].getAttribute("class")).toEqual('bar errored');
expect(alertBars[2].innerHTML).toMatch(/My Other Exception/);
}); });
}); });

View File

@@ -17,7 +17,8 @@ jasmineRequire.HtmlReporter = function(j$) {
failureCount = 0, failureCount = 0,
pendingSpecCount = 0, pendingSpecCount = 0,
htmlReporterMain, htmlReporterMain,
symbols; symbols,
exceptionsList = [];
this.initialize = function() { this.initialize = function() {
htmlReporterMain = createDom('div', {className: 'html-reporter'}, htmlReporterMain = createDom('div', {className: 'html-reporter'},
@@ -65,7 +66,7 @@ jasmineRequire.HtmlReporter = function(j$) {
}; };
this.afterAllException = function(error) { this.afterAllException = function(error) {
console.error(error); exceptionsList.push(error);
}; };
var failures = []; var failures = [];
@@ -140,6 +141,12 @@ jasmineRequire.HtmlReporter = function(j$) {
var statusBarClassName = 'bar ' + ((failureCount > 0) ? 'failed' : 'passed'); var statusBarClassName = 'bar ' + ((failureCount > 0) ? 'failed' : 'passed');
alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage)); alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage));
exceptionsList.forEach(function(error) {
var errorBarMessage = 'An error was thrown in an afterAll: ' + error.stack;
var errorBarClassName = 'bar errored';
alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessage));
});
var results = find('.results'); var results = find('.results');
results.appendChild(summary); results.appendChild(summary);

View File

@@ -152,7 +152,7 @@ body {
color: #eee; color: #eee;
&.failed { &.failed {
background-color: $failing-color background-color: $failing-color;
} }
&.passed { &.passed {
@@ -163,6 +163,10 @@ body {
background-color: $neutral-color; background-color: $neutral-color;
} }
&.errored {
background-color: $failing-color;
}
&.menu { &.menu {
background-color: #fff; background-color: #fff;
color: $faint-text-color; color: $faint-text-color;