diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index 6a3dc7b9..446e42b0 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -766,6 +766,10 @@ getJasmineRequireObj().Env = function(j$) { reporter.addReporter(reporterToAdd); }; + this.provideFallbackReporter = function(reporterToAdd) { + reporter.provideFallbackReporter(reporterToAdd); + }; + var spyRegistry = new j$.SpyRegistry({currentSpies: function() { if(!currentRunnable()) { throw new Error('Spies must be created in a before function or a spec'); @@ -1983,14 +1987,23 @@ getJasmineRequireObj().ReportDispatcher = function() { } var reporters = []; + var fallbackReporter = null; this.addReporter = function(reporter) { reporters.push(reporter); }; + + this.provideFallbackReporter = function(reporter) { + fallbackReporter = reporter; + }; + return this; function dispatch(method, args) { + if (reporters.length === 0 && fallbackReporter !== null) { + reporters.push(fallbackReporter); + } for (var i = 0; i < reporters.length; i++) { var reporter = reporters[i]; if (reporter[method]) { diff --git a/spec/core/ReportDispatcherSpec.js b/spec/core/ReportDispatcherSpec.js index 21224821..e6e65fd5 100644 --- a/spec/core/ReportDispatcherSpec.js +++ b/spec/core/ReportDispatcherSpec.js @@ -37,4 +37,28 @@ describe("ReportDispatcher", function() { dispatcher.foo(123, 456); }).not.toThrow(); }); + + it("allows providing a fallback reporter in case there's no other report", function() { + var dispatcher = new jasmineUnderTest.ReportDispatcher(['foo', 'bar']), + reporter = jasmine.createSpyObj('reporter', ['foo', 'bar']); + + dispatcher.provideFallbackReporter(reporter); + dispatcher.foo(123, 456); + expect(reporter.foo).toHaveBeenCalledWith(123, 456); + + }); + + it("does not call fallback reporting methods when another report is provided", function() { + var dispatcher = new jasmineUnderTest.ReportDispatcher(['foo', 'bar']), + reporter = jasmine.createSpyObj('reporter', ['foo', 'bar']), + fallbackReporter = jasmine.createSpyObj('otherReporter', ['foo', 'bar']); + + dispatcher.provideFallbackReporter(fallbackReporter); + dispatcher.addReporter(reporter); + dispatcher.foo(123, 456); + + expect(reporter.foo).toHaveBeenCalledWith(123, 456); + expect(fallbackReporter.foo).not.toHaveBeenCalledWith(123, 456); + + }); }); diff --git a/spec/core/integration/EnvSpec.js b/spec/core/integration/EnvSpec.js index cb4e3779..d34d9ad8 100644 --- a/spec/core/integration/EnvSpec.js +++ b/spec/core/integration/EnvSpec.js @@ -1307,6 +1307,28 @@ describe("Env integration", function() { env.execute(); }); + it('should report using fallback reporter', function(done) { + var env = new jasmineUnderTest.Env(), + reporter = jasmine.createSpyObj('fakeReporter', [ + 'specDone', + 'jasmineDone' + ]); + + reporter.jasmineDone.and.callFake(function() { + expect(reporter.specDone).toHaveBeenCalled(); + + done(); + }); + + env.provideFallbackReporter(reporter); + + env.it('will be pending', function() { + env.pending('with a message'); + }); + + env.execute(); + }); + it('should report xdescribes as expected', function(done) { var env = new jasmineUnderTest.Env(), reporter = jasmine.createSpyObj('fakeReporter', [ diff --git a/src/core/Env.js b/src/core/Env.js index 0cdea404..b9326939 100644 --- a/src/core/Env.js +++ b/src/core/Env.js @@ -262,6 +262,10 @@ getJasmineRequireObj().Env = function(j$) { reporter.addReporter(reporterToAdd); }; + this.provideFallbackReporter = function(reporterToAdd) { + reporter.provideFallbackReporter(reporterToAdd); + }; + var spyRegistry = new j$.SpyRegistry({currentSpies: function() { if(!currentRunnable()) { throw new Error('Spies must be created in a before function or a spec'); diff --git a/src/core/ReportDispatcher.js b/src/core/ReportDispatcher.js index 64454f0c..d62f36ea 100644 --- a/src/core/ReportDispatcher.js +++ b/src/core/ReportDispatcher.js @@ -13,14 +13,23 @@ getJasmineRequireObj().ReportDispatcher = function() { } var reporters = []; + var fallbackReporter = null; this.addReporter = function(reporter) { reporters.push(reporter); }; + + this.provideFallbackReporter = function(reporter) { + fallbackReporter = reporter; + }; + return this; function dispatch(method, args) { + if (reporters.length === 0 && fallbackReporter !== null) { + reporters.push(fallbackReporter); + } for (var i = 0; i < reporters.length; i++) { var reporter = reporters[i]; if (reporter[method]) {