describe("jasmine.MultiReporter", function() { var multiReporter, fakeReporter1, fakeReporter2; beforeEach(function() { multiReporter = new jasmine.MultiReporter(); fakeReporter1 = jasmine.createSpyObj("fakeReporter1", ["reportSpecResults"]); fakeReporter2 = jasmine.createSpyObj("fakeReporter2", ["reportSpecResults", "reportRunnerStarting"]); multiReporter.addReporter(fakeReporter1); multiReporter.addReporter(fakeReporter2); }); it("should support all the method calls that jasmine.Reporter supports", function() { var delegate = {}; multiReporter.addReporter(delegate); this.addMatchers({ toDelegateMethod: function(methodName) { delegate[methodName] = jasmine.createSpy(methodName); this.actual[methodName]("whatever argument"); return delegate[methodName].wasCalled && delegate[methodName].mostRecentCall.args.length == 1 && delegate[methodName].mostRecentCall.args[0] == "whatever argument"; } }); expect(multiReporter).toDelegateMethod('reportRunnerStarting'); expect(multiReporter).toDelegateMethod('reportRunnerResults'); expect(multiReporter).toDelegateMethod('reportSuiteResults'); expect(multiReporter).toDelegateMethod('reportSpecStarting'); expect(multiReporter).toDelegateMethod('reportSpecResults'); expect(multiReporter).toDelegateMethod('log'); }); it("should delegate to any and all subreporters", function() { multiReporter.reportSpecResults('blah', 'foo'); expect(fakeReporter1.reportSpecResults).toHaveBeenCalledWith('blah', 'foo'); expect(fakeReporter2.reportSpecResults).toHaveBeenCalledWith('blah', 'foo'); }); it("should quietly skip delegating to any subreporters which lack the given method", function() { multiReporter.reportRunnerStarting('blah', 'foo'); expect(fakeReporter2.reportRunnerStarting).toHaveBeenCalledWith('blah', 'foo'); }); });