From 5e3582d8e72b2711330b47817ca51187dda7afc5 Mon Sep 17 00:00:00 2001 From: Mauricio Borges Silva Date: Wed, 30 Dec 2015 14:48:47 -0200 Subject: [PATCH 1/2] Add support to fallback report providing on ReportDispatcher --- spec/core/ReportDispatcherSpec.js | 23 +++++++++++++++++++++++ src/core/ReportDispatcher.js | 9 +++++++++ 2 files changed, 32 insertions(+) diff --git a/spec/core/ReportDispatcherSpec.js b/spec/core/ReportDispatcherSpec.js index 21224821..e0f8865e 100644 --- a/spec/core/ReportDispatcherSpec.js +++ b/spec/core/ReportDispatcherSpec.js @@ -37,4 +37,27 @@ 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/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]) { From 6489b0f400f9106f802871181593b091fec3244e Mon Sep 17 00:00:00 2001 From: Mauricio Borges Silva Date: Wed, 30 Dec 2015 15:11:08 -0200 Subject: [PATCH 2/2] Add support on Env to provide fallback report --- spec/core/integration/EnvSpec.js | 24 ++++++++++++++++++++++++ src/core/Env.js | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/spec/core/integration/EnvSpec.js b/spec/core/integration/EnvSpec.js index 4ea60413..3e19b905 100644 --- a/spec/core/integration/EnvSpec.js +++ b/spec/core/integration/EnvSpec.js @@ -1282,6 +1282,30 @@ describe("Env integration", function() { env.execute(); }); + it('should report using fallback report', function(done) { + var env = new jasmineUnderTest.Env(), + reporter = jasmine.createSpyObj('fakeReporter', [ + 'specDone', + 'jasmineDone' + ]); + + reporter.jasmineDone.and.callFake(function() { + var specStatus = reporter.specDone.calls.argsFor(0)[0]; + + expect(specStatus.pendingReason).toBe('with a message'); + + 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 5289fd18..81627851 100644 --- a/src/core/Env.js +++ b/src/core/Env.js @@ -263,6 +263,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');