diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index 6b05ccbd..e3a62a7c 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -1830,11 +1830,9 @@ getJasmineRequireObj().Env = function(j$) { } } - function ensureNonParallelOrInDescribe(method) { + function ensureNonParallelOrInDescribe(msg) { if (parallelLoadingState && !suiteBuilder.inDescribe()) { - throw new Error( - `In parallel mode, '${method}' must be in a describe block` - ); + throw new Error(msg); } } @@ -1987,7 +1985,13 @@ getJasmineRequireObj().Env = function(j$) { this.beforeAll = function(beforeAllFunction, timeout) { ensureIsNotNested('beforeAll'); - ensureNonParallelOrInDescribe('beforeAll'); + // This message is -npm-specific, but currently parallel operation is + // only supported via -npm. + ensureNonParallelOrInDescribe( + "In parallel mode, 'beforeAll' " + + 'must be in a describe block. Use the globalSetup config ' + + 'property for exactly-once setup in parallel mode.' + ); suiteBuilder.beforeAll(beforeAllFunction, timeout); }; @@ -1999,7 +2003,13 @@ getJasmineRequireObj().Env = function(j$) { this.afterAll = function(afterAllFunction, timeout) { ensureIsNotNested('afterAll'); - ensureNonParallelOrInDescribe('afterAll'); + // This message is -npm-specific, but currently parallel operation is + // only supported via -npm. + ensureNonParallelOrInDescribe( + "In parallel mode, 'afterAll' " + + 'must be in a describe block. Use the globalTeardown config ' + + 'property for exactly-once teardown in parallel mode.' + ); suiteBuilder.afterAll(afterAllFunction, timeout); }; diff --git a/spec/core/EnvSpec.js b/spec/core/EnvSpec.js index 8243f452..2039fa03 100644 --- a/spec/core/EnvSpec.js +++ b/spec/core/EnvSpec.js @@ -1,6 +1,5 @@ // TODO: Fix these unit tests! describe('Env', function() { - beforeAll(function() {}); let env; beforeEach(function() { env = new jasmineUnderTest.Env(); @@ -480,7 +479,9 @@ describe('Env', function() { expect(function() { env.beforeAll(function() {}); }).toThrowError( - "In parallel mode, 'beforeAll' must be in a describe block" + "In parallel mode, 'beforeAll' must be in a describe block. " + + 'Use the globalSetup config property for exactly-once setup in' + + ' parallel mode.' ); } }); @@ -585,7 +586,9 @@ describe('Env', function() { expect(function() { env.afterAll(function() {}); }).toThrowError( - "In parallel mode, 'afterAll' must be in a describe block" + "In parallel mode, 'afterAll' must be in a describe block. " + + 'Use the globalTeardown config property for exactly-once ' + + 'teardown in parallel mode.' ); } }); diff --git a/src/core/Env.js b/src/core/Env.js index 67e680b1..9a08c9f1 100644 --- a/src/core/Env.js +++ b/src/core/Env.js @@ -688,11 +688,9 @@ getJasmineRequireObj().Env = function(j$) { } } - function ensureNonParallelOrInDescribe(method) { + function ensureNonParallelOrInDescribe(msg) { if (parallelLoadingState && !suiteBuilder.inDescribe()) { - throw new Error( - `In parallel mode, '${method}' must be in a describe block` - ); + throw new Error(msg); } } @@ -845,7 +843,13 @@ getJasmineRequireObj().Env = function(j$) { this.beforeAll = function(beforeAllFunction, timeout) { ensureIsNotNested('beforeAll'); - ensureNonParallelOrInDescribe('beforeAll'); + // This message is -npm-specific, but currently parallel operation is + // only supported via -npm. + ensureNonParallelOrInDescribe( + "In parallel mode, 'beforeAll' " + + 'must be in a describe block. Use the globalSetup config ' + + 'property for exactly-once setup in parallel mode.' + ); suiteBuilder.beforeAll(beforeAllFunction, timeout); }; @@ -857,7 +861,13 @@ getJasmineRequireObj().Env = function(j$) { this.afterAll = function(afterAllFunction, timeout) { ensureIsNotNested('afterAll'); - ensureNonParallelOrInDescribe('afterAll'); + // This message is -npm-specific, but currently parallel operation is + // only supported via -npm. + ensureNonParallelOrInDescribe( + "In parallel mode, 'afterAll' " + + 'must be in a describe block. Use the globalTeardown config ' + + 'property for exactly-once teardown in parallel mode.' + ); suiteBuilder.afterAll(afterAllFunction, timeout); };