diff --git a/lib/runner.js b/lib/runner.js index 2955be8..a83234a 100644 --- a/lib/runner.js +++ b/lib/runner.js @@ -12,14 +12,18 @@ function Runner(opts) { EventEmitter.call(this); this.results = []; - this.stats = {}; - this.stats.failCount = 0; - this.stats.testCount = 0; - this.tests = {}; - this.tests.concurrent = []; - this.tests.serial = []; - this.tests.before = []; - this.tests.after = []; + + this.stats = { + failCount: 0, + testCount: 0 + }; + + this.tests = { + concurrent: [], + serial: [], + before: [], + after: [] + }; } util.inherits(Runner, EventEmitter); @@ -44,29 +48,33 @@ Runner.prototype.addAfterHook = function (title, cb) { }; Runner.prototype.concurrent = function (tests) { - // run all tests - tests = tests.map(function (test) { - // in case of error, don't reject a promise - return test.run().catch(function () { - return; - }).then(function () { - this._addTestResult(test); - }.bind(this)); - }, this); + var self = this; - return Promise.all(tests); + // run all tests + return Promise.all(tests.map(function (test) { + return test.run() + .catch(function () { + // in case of error, don't reject a promise + return; + }) + .then(function () { + self._addTestResult(test); + }); + })); }; Runner.prototype.serial = function (tests) { + var self = this; + return Promise.resolve(tests).each(function (test) { return test.run() .catch(function () { return; }) .then(function () { - this._addTestResult(test); - }.bind(this)); - }.bind(this)); + self._addTestResult(test); + }); + }); }; Runner.prototype._addTestResult = function (test) { @@ -84,32 +92,29 @@ Runner.prototype._addTestResult = function (test) { }; Runner.prototype.run = function () { - var concurrent = this.tests.concurrent; - var serial = this.tests.serial; - var before = this.tests.before; - var after = this.tests.after; - var self = this; + var tests = this.tests; + var stats = this.stats; - return this.serial(before) + return this.serial(tests.before) .then(function () { - if (self.stats.failCount > 0) { + if (stats.failCount > 0) { return Promise.reject(); } }) .then(function () { - return self.serial(serial); + return self.serial(tests.serial); }) .then(function () { - return self.concurrent(concurrent); + return self.concurrent(tests.concurrent); }) .then(function () { - return self.serial(after); + return self.serial(tests.after); }) .catch(function () { return; }) .then(function () { - self.stats.passCount = self.stats.testCount - self.stats.failCount; + stats.passCount = stats.testCount - stats.failCount; }); };