diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index daa3023d..638457f9 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -9523,12 +9523,7 @@ getJasmineRequireObj().Runner = function(j$) { return !config.specFilter(spec); } }); - - if (!processor.processTree().valid) { - throw new Error( - 'Invalid order: would cause a beforeAll or afterAll to be run multiple times' - ); - } + processor.processTree(); return this.#execute2(runablesToRun, order, processor); } @@ -11358,7 +11353,7 @@ getJasmineRequireObj().TreeProcessor = function() { } if (!this.#stats.valid) { - throw 'invalid order'; + throw new Error('invalid order'); } const childFns = this.#wrapChildren(this.#tree, 0); @@ -11439,6 +11434,9 @@ getJasmineRequireObj().TreeProcessor = function() { this.#stats[node.id].segments.length > 1 ) { this.#stats = { valid: false }; + throw new Error( + 'Invalid order: would cause a beforeAll or afterAll to be run multiple times' + ); } } } diff --git a/spec/core/TreeProcessorSpec.js b/spec/core/TreeProcessorSpec.js index 8465bda2..1ae21565 100644 --- a/spec/core/TreeProcessorSpec.js +++ b/spec/core/TreeProcessorSpec.js @@ -217,7 +217,7 @@ describe('TreeProcessor', function() { }); }); - it('marks the run order invalid if it would re-enter a node that does not allow re-entry', function() { + it('marks the run order invalid if it would re-enter a node that does not allow re-entry', async function() { const leaf1 = new Leaf(), leaf2 = new Leaf(), leaf3 = new Leaf(), @@ -226,10 +226,18 @@ describe('TreeProcessor', function() { processor = new jasmineUnderTest.TreeProcessor({ tree: root, runnableIds: [leaf1.id, leaf3.id, leaf2.id] - }), - result = processor.processTree(); + }); - expect(result).toEqual({ valid: false }); + expect(function() { + processor.processTree(); + }).toThrowError( + 'Invalid order: would cause a beforeAll or afterAll to be run multiple times' + ); + + // Subsequent attempts to execute should fail + await expectAsync(processor.execute()).toBeRejectedWithError( + 'invalid order' + ); }); it('marks the run order valid if a node being re-entered allows re-entry', function() { diff --git a/src/core/Runner.js b/src/core/Runner.js index c21dee8b..0f3f43b7 100644 --- a/src/core/Runner.js +++ b/src/core/Runner.js @@ -122,12 +122,7 @@ getJasmineRequireObj().Runner = function(j$) { return !config.specFilter(spec); } }); - - if (!processor.processTree().valid) { - throw new Error( - 'Invalid order: would cause a beforeAll or afterAll to be run multiple times' - ); - } + processor.processTree(); return this.#execute2(runablesToRun, order, processor); } diff --git a/src/core/TreeProcessor.js b/src/core/TreeProcessor.js index b9a8e576..a2d0e8ff 100644 --- a/src/core/TreeProcessor.js +++ b/src/core/TreeProcessor.js @@ -52,7 +52,7 @@ getJasmineRequireObj().TreeProcessor = function() { } if (!this.#stats.valid) { - throw 'invalid order'; + throw new Error('invalid order'); } const childFns = this.#wrapChildren(this.#tree, 0); @@ -133,6 +133,9 @@ getJasmineRequireObj().TreeProcessor = function() { this.#stats[node.id].segments.length > 1 ) { this.#stats = { valid: false }; + throw new Error( + 'Invalid order: would cause a beforeAll or afterAll to be run multiple times' + ); } } }