Allow for registration of multiple Reporter with Jasmine.
This commit is contained in:
parent
521f839753
commit
a6aa9c652b
|
@ -567,12 +567,18 @@ jasmine.util.argsToArray = function(args) {
|
||||||
return arrayOfArgs;
|
return arrayOfArgs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Environment for Jasmine
|
||||||
|
* @
|
||||||
|
*/
|
||||||
jasmine.Env = function() {
|
jasmine.Env = function() {
|
||||||
this.currentSpec = null;
|
this.currentSpec = null;
|
||||||
this.currentSuite = null;
|
this.currentSuite = null;
|
||||||
this.currentRunner = new jasmine.Runner(this);
|
this.currentRunner = new jasmine.Runner(this);
|
||||||
this.currentlyRunningTests = false;
|
this.currentlyRunningTests = false;
|
||||||
|
|
||||||
|
this.reporter = new jasmine.MultiReporter();
|
||||||
|
|
||||||
this.updateInterval = 0;
|
this.updateInterval = 0;
|
||||||
this.lastUpdate = 0;
|
this.lastUpdate = 0;
|
||||||
this.specFilter = function() {
|
this.specFilter = function() {
|
||||||
|
@ -589,6 +595,14 @@ jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout;
|
||||||
jasmine.Env.prototype.setInterval = jasmine.setInterval;
|
jasmine.Env.prototype.setInterval = jasmine.setInterval;
|
||||||
jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
|
jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a reporter to receive status updates from Jasmine.
|
||||||
|
* @param {Object} reporter An object which will receive status updates.
|
||||||
|
*/
|
||||||
|
jasmine.Env.prototype.addReporter = function(reporter) {
|
||||||
|
this.reporter.addReporter(reporter);
|
||||||
|
};
|
||||||
|
|
||||||
jasmine.Env.prototype.execute = function() {
|
jasmine.Env.prototype.execute = function() {
|
||||||
this.currentRunner.execute();
|
this.currentRunner.execute();
|
||||||
};
|
};
|
||||||
|
@ -1260,6 +1274,30 @@ window.clearInterval = function(timeoutKey) {
|
||||||
return jasmine.Clock.installed.clearInterval.apply(this, arguments);
|
return jasmine.Clock.installed.clearInterval.apply(this, arguments);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
jasmine.MultiReporter = function() {
|
||||||
|
this.subReporters_ = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.MultiReporter.prototype.addReporter = function(reporter) {
|
||||||
|
this.subReporters_.push(reporter);
|
||||||
|
};
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var functionNames = ["reportRunnerResults", "reportSuiteResults", "reportSpecResults", "log"];
|
||||||
|
for (var i = 0; i < functionNames.length; i++) {
|
||||||
|
var functionName = functionNames[i];
|
||||||
|
jasmine.MultiReporter.prototype[functionName] = (function(functionName) {
|
||||||
|
return function() {
|
||||||
|
for (var j = 0; j < this.subReporters_.length; j++) {
|
||||||
|
this.subReporters_[j][functionName].apply(this.subReporters_[j], arguments);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})(functionName);
|
||||||
|
}
|
||||||
|
})();
|
||||||
/**
|
/**
|
||||||
* Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults
|
* Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults
|
||||||
*
|
*
|
||||||
|
@ -1602,8 +1640,8 @@ jasmine.Runner.prototype.getResults = function() {
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* Internal representation of a Jasmine specification, or test.
|
* Internal representation of a Jasmine specification, or test.
|
||||||
* @private
|
*
|
||||||
* @constructs
|
* @constructor
|
||||||
* @param {jasmine.Env} env
|
* @param {jasmine.Env} env
|
||||||
* @param {jasmine.Suite} suite
|
* @param {jasmine.Suite} suite
|
||||||
* @param {String} description
|
* @param {String} description
|
||||||
|
@ -1806,7 +1844,7 @@ jasmine.Spec.prototype.removeAllSpies = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For storing & executing a Jasmine suite.
|
* Internal representation of a Jasmine suite.
|
||||||
*
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {jasmine.Env} env
|
* @param {jasmine.Env} env
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
<script type="text/javascript" src="../src/Env.js"></script>
|
<script type="text/javascript" src="../src/Env.js"></script>
|
||||||
<script type="text/javascript" src="../src/ActionCollection.js"></script>
|
<script type="text/javascript" src="../src/ActionCollection.js"></script>
|
||||||
<script type="text/javascript" src="../src/Matchers.js"></script>
|
<script type="text/javascript" src="../src/Matchers.js"></script>
|
||||||
|
<script type="text/javascript" src="../src/MultiReporter.js"></script>
|
||||||
<script type="text/javascript" src="../src/NestedResults.js"></script>
|
<script type="text/javascript" src="../src/NestedResults.js"></script>
|
||||||
<script type="text/javascript" src="../src/PrettyPrinter.js"></script>
|
<script type="text/javascript" src="../src/PrettyPrinter.js"></script>
|
||||||
<script type="text/javascript" src="../src/QueuedFunction.js"></script>
|
<script type="text/javascript" src="../src/QueuedFunction.js"></script>
|
||||||
|
@ -28,6 +29,7 @@
|
||||||
jasmine.include('suites/ExceptionsTest.js', true);
|
jasmine.include('suites/ExceptionsTest.js', true);
|
||||||
jasmine.include('suites/JsonReporterTest.js', true);
|
jasmine.include('suites/JsonReporterTest.js', true);
|
||||||
jasmine.include('suites/MatchersTest.js', true);
|
jasmine.include('suites/MatchersTest.js', true);
|
||||||
|
jasmine.include('suites/MultiReporterTest.js', true);
|
||||||
jasmine.include('suites/NestedResultsTest.js', true);
|
jasmine.include('suites/NestedResultsTest.js', true);
|
||||||
jasmine.include('suites/PrettyPrintTest.js', true);
|
jasmine.include('suites/PrettyPrintTest.js', true);
|
||||||
jasmine.include('suites/ReporterTest.js', true);
|
jasmine.include('suites/ReporterTest.js', true);
|
||||||
|
@ -66,9 +68,8 @@
|
||||||
|
|
||||||
|
|
||||||
var jasmineEnv = jasmine.getEnv();
|
var jasmineEnv = jasmine.getEnv();
|
||||||
jasmineEnv.reporter = new jasmine.TrivialReporter();
|
jasmineEnv.addReporter(new jasmine.TrivialReporter());
|
||||||
jasmineEnv.execute();
|
jasmineEnv.execute();
|
||||||
console.log('env', jasmineEnv);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
describe("MultiReporter", function() {
|
||||||
|
it("should delegate to any and all subreporters", function() {
|
||||||
|
var multiReporter = new jasmine.MultiReporter();
|
||||||
|
var fakeReporter1 = jasmine.createSpyObj("fakeReporter1", ["reportSpecResults"]);
|
||||||
|
var fakeReporter2 = jasmine.createSpyObj("fakeReporter2", ["reportSpecResults"]);
|
||||||
|
multiReporter.addReporter(fakeReporter1);
|
||||||
|
multiReporter.addReporter(fakeReporter2);
|
||||||
|
|
||||||
|
multiReporter.reportSpecResults('blah', 'foo');
|
||||||
|
expect(fakeReporter1.reportSpecResults).wasCalledWith('blah', 'foo');
|
||||||
|
expect(fakeReporter2.reportSpecResults).wasCalledWith('blah', 'foo');
|
||||||
|
});
|
||||||
|
});
|
14
src/Env.js
14
src/Env.js
|
@ -1,9 +1,15 @@
|
||||||
|
/**
|
||||||
|
* Environment for Jasmine
|
||||||
|
* @
|
||||||
|
*/
|
||||||
jasmine.Env = function() {
|
jasmine.Env = function() {
|
||||||
this.currentSpec = null;
|
this.currentSpec = null;
|
||||||
this.currentSuite = null;
|
this.currentSuite = null;
|
||||||
this.currentRunner = new jasmine.Runner(this);
|
this.currentRunner = new jasmine.Runner(this);
|
||||||
this.currentlyRunningTests = false;
|
this.currentlyRunningTests = false;
|
||||||
|
|
||||||
|
this.reporter = new jasmine.MultiReporter();
|
||||||
|
|
||||||
this.updateInterval = 0;
|
this.updateInterval = 0;
|
||||||
this.lastUpdate = 0;
|
this.lastUpdate = 0;
|
||||||
this.specFilter = function() {
|
this.specFilter = function() {
|
||||||
|
@ -20,6 +26,14 @@ jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout;
|
||||||
jasmine.Env.prototype.setInterval = jasmine.setInterval;
|
jasmine.Env.prototype.setInterval = jasmine.setInterval;
|
||||||
jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
|
jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a reporter to receive status updates from Jasmine.
|
||||||
|
* @param {Object} reporter An object which will receive status updates.
|
||||||
|
*/
|
||||||
|
jasmine.Env.prototype.addReporter = function(reporter) {
|
||||||
|
this.reporter.addReporter(reporter);
|
||||||
|
};
|
||||||
|
|
||||||
jasmine.Env.prototype.execute = function() {
|
jasmine.Env.prototype.execute = function() {
|
||||||
this.currentRunner.execute();
|
this.currentRunner.execute();
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
jasmine.MultiReporter = function() {
|
||||||
|
this.subReporters_ = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.MultiReporter.prototype.addReporter = function(reporter) {
|
||||||
|
this.subReporters_.push(reporter);
|
||||||
|
};
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var functionNames = ["reportRunnerResults", "reportSuiteResults", "reportSpecResults", "log"];
|
||||||
|
for (var i = 0; i < functionNames.length; i++) {
|
||||||
|
var functionName = functionNames[i];
|
||||||
|
jasmine.MultiReporter.prototype[functionName] = (function(functionName) {
|
||||||
|
return function() {
|
||||||
|
for (var j = 0; j < this.subReporters_.length; j++) {
|
||||||
|
this.subReporters_[j][functionName].apply(this.subReporters_[j], arguments);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})(functionName);
|
||||||
|
}
|
||||||
|
})();
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* Internal representation of a Jasmine specification, or test.
|
* Internal representation of a Jasmine specification, or test.
|
||||||
* @private
|
*
|
||||||
* @constructs
|
* @constructor
|
||||||
* @param {jasmine.Env} env
|
* @param {jasmine.Env} env
|
||||||
* @param {jasmine.Suite} suite
|
* @param {jasmine.Suite} suite
|
||||||
* @param {String} description
|
* @param {String} description
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* For storing & executing a Jasmine suite.
|
* Internal representation of a Jasmine suite.
|
||||||
*
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {jasmine.Env} env
|
* @param {jasmine.Env} env
|
||||||
|
|
Loading…
Reference in New Issue