diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index 5caa353a..642696cd 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -1651,15 +1651,17 @@ getJasmineRequireObj().Env = function(j$) { * {@link JasmineDoneInfo|overall result} that's passed to a reporter's * `jasmineDone` method, even if the suite did not pass. To determine * whether the suite passed, check the value that the promise resolves to - * or use a {@link Reporter}. + * or use a {@link Reporter}. The promise will be rejected in the case of + * certain serious errors that prevent execution from starting. * * @name Env#execute * @since 2.0.0 * @function + * @async * @param {(string[])=} runablesToRun IDs of suites and/or specs to run * @return {Promise} */ - this.execute = function(runablesToRun) { + this.execute = async function(runablesToRun) { installGlobalErrors(); return runner.execute(runablesToRun); }; @@ -8398,11 +8400,7 @@ getJasmineRequireObj().Runner = function(j$) { ]; } - // Although execute returns a promise, it isn't async for backwards - // compatibility: The "Invalid order" exception needs to be propagated - // synchronously from Env#execute. - // TODO: make this and Env#execute async in the next major release - execute(runablesToRun) { + async execute(runablesToRun) { if (this.executedBefore_) { this.topSuite_.reset(); } diff --git a/spec/core/integration/SpecRunningSpec.js b/spec/core/integration/SpecRunningSpec.js index dcba0943..775c0d2f 100644 --- a/spec/core/integration/SpecRunningSpec.js +++ b/spec/core/integration/SpecRunningSpec.js @@ -626,7 +626,7 @@ describe('spec running', function() { expect(actions).toEqual(['spec2', 'spec3', 'spec1']); }); - it('refuses to re-enter suites with a beforeAll', function() { + it('refuses to re-enter suites with a beforeAll', async function() { const actions = []; let spec1; let spec2; @@ -648,13 +648,12 @@ describe('spec running', function() { actions.push('spec3'); }); - expect(function() { - env.execute([spec2.id, spec3.id, spec1.id]); - }).toThrowError(/beforeAll/); + const promise = env.execute([spec2.id, spec3.id, spec1.id]); + await expectAsync(promise).toBeRejectedWithError(/beforeAll/); expect(actions).toEqual([]); }); - it('refuses to re-enter suites with a afterAll', function() { + it('refuses to re-enter suites with a afterAll', async function() { const actions = []; let spec1; let spec2; @@ -676,9 +675,8 @@ describe('spec running', function() { actions.push('spec3'); }); - expect(function() { - env.execute([spec2.id, spec3.id, spec1.id]); - }).toThrowError(/afterAll/); + const promise = env.execute([spec2.id, spec3.id, spec1.id]); + await expectAsync(promise).toBeRejectedWithError(/afterAll/); expect(actions).toEqual([]); }); diff --git a/src/core/Env.js b/src/core/Env.js index 37be3ccc..a660e0c8 100644 --- a/src/core/Env.js +++ b/src/core/Env.js @@ -509,15 +509,17 @@ getJasmineRequireObj().Env = function(j$) { * {@link JasmineDoneInfo|overall result} that's passed to a reporter's * `jasmineDone` method, even if the suite did not pass. To determine * whether the suite passed, check the value that the promise resolves to - * or use a {@link Reporter}. + * or use a {@link Reporter}. The promise will be rejected in the case of + * certain serious errors that prevent execution from starting. * * @name Env#execute * @since 2.0.0 * @function + * @async * @param {(string[])=} runablesToRun IDs of suites and/or specs to run * @return {Promise} */ - this.execute = function(runablesToRun) { + this.execute = async function(runablesToRun) { installGlobalErrors(); return runner.execute(runablesToRun); }; diff --git a/src/core/Runner.js b/src/core/Runner.js index 10df5195..8acd7dc6 100644 --- a/src/core/Runner.js +++ b/src/core/Runner.js @@ -26,11 +26,7 @@ getJasmineRequireObj().Runner = function(j$) { ]; } - // Although execute returns a promise, it isn't async for backwards - // compatibility: The "Invalid order" exception needs to be propagated - // synchronously from Env#execute. - // TODO: make this and Env#execute async in the next major release - execute(runablesToRun) { + async execute(runablesToRun) { if (this.executedBefore_) { this.topSuite_.reset(); }