diff --git a/utils/testrunner/TestRunner.js b/utils/testrunner/TestRunner.js index 8f0dc1838d..fc4400c89d 100644 --- a/utils/testrunner/TestRunner.js +++ b/utils/testrunner/TestRunner.js @@ -322,14 +322,6 @@ class TestRunner extends EventEmitter { } } - // bind methods so that they can be used as a DSL. - this.describe = this._addSuite.bind(this, TestMode.Run); - this.describe.skip = condition => condition ? this.xdescribe : this.describe; - this.fdescribe = this._addSuite.bind(this, TestMode.Focus); - this.fdescribe.skip = () => this.fdescribe; // no-op - this.xdescribe = this._addSuite.bind(this, TestMode.Skip); - this.xdescribe.skip = () => this.xdescribe; // no-op - const duplicateTest = (amount, mode, timeout) => { return (name, callback) => { for (let i = 0; i < amount; ++i) @@ -337,6 +329,24 @@ class TestRunner extends EventEmitter { } } + const duplicateSuite = (amount, mode) => { + return (name, callback, ...args) => { + for (let i = 0; i < amount; ++i) + this._addSuite(mode, name, callback, ...args); + } + } + + // bind methods so that they can be used as a DSL. + this.describe = this._addSuite.bind(this, TestMode.Run); + this.describe.skip = condition => condition ? this.xdescribe : this.describe; + this.describe.repeat = number => duplicateSuite(number, TestMode.Run); + this.fdescribe = this._addSuite.bind(this, TestMode.Focus); + this.fdescribe.skip = () => this.fdescribe; // no-op + this.fdescribe.repeat = number => duplicateSuite(number, TestMode.Focus); + this.xdescribe = this._addSuite.bind(this, TestMode.Skip); + this.xdescribe.skip = () => this.xdescribe; // no-op + this.xdescribe.repeat = number => duplicateSuite(number, TestMode.Skip); + this.it = (name, callback) => void this._addTest(name, callback, TestMode.Run, this._timeout); this.it.skip = condition => condition ? this.xit : this.it; this.it.repeat = number => duplicateTest(number, TestMode.Run, this._timeout);