diff --git a/lib/jasmine-core/jasmine-html.js b/lib/jasmine-core/jasmine-html.js index 40d2811f..5c068e9d 100644 --- a/lib/jasmine-core/jasmine-html.js +++ b/lib/jasmine-core/jasmine-html.js @@ -62,7 +62,7 @@ jasmine.HtmlReporterHelpers.addHelpers = function(ctor) { } }; -jasmine.HtmlReporter = function(_doc, jasmine) { +jasmine.HtmlReporter = function(_doc, jasmine, yieldForRender) { var self = this; this.jasmine = jasmine || window.jasmine; var doc = _doc || window.document; @@ -99,8 +99,20 @@ jasmine.HtmlReporter = function(_doc, jasmine) { self.reportSpecStarting = function(spec) { }; + var lastYieldForRender = 0; + var refreshInterval = 250; + yieldForRender = yieldForRender || function(fn) { + var now = Date.now(); + var delta = (now - lastYieldForRender); + if (delta > refreshInterval) { + lastYieldForRender = now; + setTimeout(fn, 0); + } else { + fn(); + } + } self.reportSpecResults = function(result) { - reporterView.specComplete(result); + yieldForRender(function() {reporterView.specComplete(result) }); }; self.log = function() { diff --git a/spec/html/HTMLReporterSpec.js b/spec/html/HTMLReporterSpec.js index 69232388..65424bc9 100644 --- a/spec/html/HTMLReporterSpec.js +++ b/spec/html/HTMLReporterSpec.js @@ -8,9 +8,10 @@ describe("HtmlReporter", function() { env = new jasmine.Env(); env.updateInterval = 0; + body = document.createElement("body"); fakeDocument = { body: body, location: { search: "" } }; - htmlReporter = new jasmine.HtmlReporter(fakeDocument); + htmlReporter = new jasmine.HtmlReporter(fakeDocument, null, function(fn) { fn() }); }); function fakeSpec(name) { diff --git a/src/html/HtmlReporter.js b/src/html/HtmlReporter.js index 09abcab5..7b31b500 100644 --- a/src/html/HtmlReporter.js +++ b/src/html/HtmlReporter.js @@ -1,4 +1,4 @@ -jasmine.HtmlReporter = function(_doc, jasmine) { +jasmine.HtmlReporter = function(_doc, jasmine, yieldForRender) { var self = this; this.jasmine = jasmine || window.jasmine; var doc = _doc || window.document; @@ -35,8 +35,20 @@ jasmine.HtmlReporter = function(_doc, jasmine) { self.reportSpecStarting = function(spec) { }; + var lastYieldForRender = 0; + var refreshInterval = 250; + yieldForRender = yieldForRender || function(fn) { + var now = Date.now(); + var delta = (now - lastYieldForRender); + if (delta > refreshInterval) { + lastYieldForRender = now; + setTimeout(fn, 0); + } else { + fn(); + } + } self.reportSpecResults = function(result) { - reporterView.specComplete(result); + yieldForRender(function() {reporterView.specComplete(result) }); }; self.log = function() {