diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index 517b2aef..6a5ee6cc 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -763,7 +763,7 @@ getJasmineRequireObj().Env = function(j$) { var throwOnExpectationFailure = false; var random = true; var seed = null; - var suppressLoadErrors = false; + var handlingLoadErrors = true; var hasFailures = false; var currentSuite = function() { @@ -830,15 +830,13 @@ getJasmineRequireObj().Env = function(j$) { var globalErrors = new j$.GlobalErrors(); globalErrors.install(); globalErrors.pushListener(function(message, filename, lineno) { - if (!suppressLoadErrors) { - topSuite.result.failedExpectations.push({ - passed: false, - globalErrorType: 'load', - message: message, - filename: filename, - lineno: lineno - }); - } + topSuite.result.failedExpectations.push({ + passed: false, + globalErrorType: 'load', + message: message, + filename: filename, + lineno: lineno + }); }); this.specFilter = function() { @@ -984,7 +982,10 @@ getJasmineRequireObj().Env = function(j$) { }; this.suppressLoadErrors = function() { - suppressLoadErrors = true; + if (handlingLoadErrors) { + globalErrors.popListener(); + } + handlingLoadErrors = false; }; var queueRunnerFactory = function(options) { @@ -1013,7 +1014,7 @@ getJasmineRequireObj().Env = function(j$) { }; this.execute = function(runnablesToRun) { - globalErrors.popListener(); + this.suppressLoadErrors(); if(!runnablesToRun) { if (focusedRunnables.length) { diff --git a/spec/core/integration/EnvSpec.js b/spec/core/integration/EnvSpec.js index ca3a5f86..d1a78de2 100644 --- a/spec/core/integration/EnvSpec.js +++ b/spec/core/integration/EnvSpec.js @@ -2053,18 +2053,23 @@ describe("Env integration", function() { }); describe('If suppressLoadErrors was called', function() { - it('does not report errors that occur during loading', function(done) { + it('does not report or handle errors that occur during loading', function(done) { var global = { setTimeout: function(fn, delay) { setTimeout(fn, delay) }, - clearTimeout: function(fn, delay) { clearTimeout(fn, delay) }, + clearTimeout: function(fn, delay) { clearTimeout(fn, delay) } }; spyOn(jasmineUnderTest, 'getGlobal').and.returnValue(global); + var globalErrors = new jasmineUnderTest.GlobalErrors(global); + var onerror = jasmine.createSpy('onerror'); + globalErrors.pushListener(onerror); + spyOn(jasmineUnderTest, 'GlobalErrors').and.returnValue(globalErrors); var env = new jasmineUnderTest.Env(), reporter = jasmine.createSpyObj('reporter', ['jasmineDone', 'suiteDone', 'specDone']); reporter.jasmineDone.and.callFake(function(e) { expect(e.failedExpectations).toEqual([]); + expect(onerror).toHaveBeenCalledWith('Uncaught Error: ENOCHEESE'); done(); }); diff --git a/src/core/Env.js b/src/core/Env.js index 473cc1f8..003fd8fc 100644 --- a/src/core/Env.js +++ b/src/core/Env.js @@ -28,7 +28,7 @@ getJasmineRequireObj().Env = function(j$) { var throwOnExpectationFailure = false; var random = true; var seed = null; - var suppressLoadErrors = false; + var handlingLoadErrors = true; var hasFailures = false; var currentSuite = function() { @@ -95,15 +95,13 @@ getJasmineRequireObj().Env = function(j$) { var globalErrors = new j$.GlobalErrors(); globalErrors.install(); globalErrors.pushListener(function(message, filename, lineno) { - if (!suppressLoadErrors) { - topSuite.result.failedExpectations.push({ - passed: false, - globalErrorType: 'load', - message: message, - filename: filename, - lineno: lineno - }); - } + topSuite.result.failedExpectations.push({ + passed: false, + globalErrorType: 'load', + message: message, + filename: filename, + lineno: lineno + }); }); this.specFilter = function() { @@ -249,7 +247,10 @@ getJasmineRequireObj().Env = function(j$) { }; this.suppressLoadErrors = function() { - suppressLoadErrors = true; + if (handlingLoadErrors) { + globalErrors.popListener(); + } + handlingLoadErrors = false; }; var queueRunnerFactory = function(options) { @@ -278,7 +279,7 @@ getJasmineRequireObj().Env = function(j$) { }; this.execute = function(runnablesToRun) { - globalErrors.popListener(); + this.suppressLoadErrors(); if(!runnablesToRun) { if (focusedRunnables.length) {