Skip to content

Commit

Permalink
Throw an error on nested methods
Browse files Browse the repository at this point in the history
  • Loading branch information
ksvitkovsky committed Aug 10, 2017
1 parent da2673e commit ab116fb
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/core/Env.js
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,12 @@ getJasmineRequireObj().Env = function(j$) {
}
};

function ensureIsNotNested(method, currentSuite) {
if (currentSuite !== undefined) {
throw new Error('\'' + method + '\' should only be used in \'describe\' function');
}
}

var suiteFactory = function(description) {
var suite = new j$.Suite({
env: self,
Expand All @@ -399,6 +405,7 @@ getJasmineRequireObj().Env = function(j$) {
};

this.describe = function(description, specDefinitions) {
ensureIsNotNested('describe', currentSuite());
ensureIsFunction(specDefinitions, 'describe');
var suite = suiteFactory(description);
if (specDefinitions.length > 0) {
Expand All @@ -412,6 +419,7 @@ getJasmineRequireObj().Env = function(j$) {
};

this.xdescribe = function(description, specDefinitions) {
ensureIsNotNested('xdescribe', currentSuite());
ensureIsFunction(specDefinitions, 'xdescribe');
var suite = suiteFactory(description);
suite.pend();
Expand All @@ -422,6 +430,7 @@ getJasmineRequireObj().Env = function(j$) {
var focusedRunnables = [];

this.fdescribe = function(description, specDefinitions) {
ensureIsNotNested('fdescribe', currentSuite());
ensureIsFunction(specDefinitions, 'fdescribe');
var suite = suiteFactory(description);
suite.isFocused = true;
Expand Down Expand Up @@ -519,6 +528,7 @@ getJasmineRequireObj().Env = function(j$) {
};

this.it = function(description, fn, timeout) {
ensureIsNotNested('it', currentSuite());
// it() sometimes doesn't have a fn argument, so only check the type if
// it's given.
if (arguments.length > 1 && typeof fn !== 'undefined') {
Expand All @@ -533,6 +543,7 @@ getJasmineRequireObj().Env = function(j$) {
};

this.xit = function(description, fn, timeout) {
ensureIsNotNested('xit', currentSuite());
// xit(), like it(), doesn't always have a fn argument, so only check the
// type when needed.
if (arguments.length > 1 && typeof fn !== 'undefined') {
Expand All @@ -544,6 +555,7 @@ getJasmineRequireObj().Env = function(j$) {
};

this.fit = function(description, fn, timeout){
ensureIsNotNested('fit', currentSuite());
ensureIsFunctionOrAsync(fn, 'fit');
var spec = specFactory(description, fn, currentDeclarationSuite, timeout);
currentDeclarationSuite.addChild(spec);
Expand All @@ -561,6 +573,7 @@ getJasmineRequireObj().Env = function(j$) {
};

this.beforeEach = function(beforeEachFunction, timeout) {
ensureIsNotNested('beforeEach', currentSuite());
ensureIsFunctionOrAsync(beforeEachFunction, 'beforeEach');
currentDeclarationSuite.beforeEach({
fn: beforeEachFunction,
Expand All @@ -569,6 +582,7 @@ getJasmineRequireObj().Env = function(j$) {
};

this.beforeAll = function(beforeAllFunction, timeout) {
ensureIsNotNested('beforeAll', currentSuite());
ensureIsFunctionOrAsync(beforeAllFunction, 'beforeAll');
currentDeclarationSuite.beforeAll({
fn: beforeAllFunction,
Expand All @@ -577,6 +591,7 @@ getJasmineRequireObj().Env = function(j$) {
};

this.afterEach = function(afterEachFunction, timeout) {
ensureIsNotNested('afterEach', currentSuite());
ensureIsFunctionOrAsync(afterEachFunction, 'afterEach');
afterEachFunction.isCleanup = true;
currentDeclarationSuite.afterEach({
Expand All @@ -586,6 +601,7 @@ getJasmineRequireObj().Env = function(j$) {
};

this.afterAll = function(afterAllFunction, timeout) {
ensureIsNotNested('afterAll', currentSuite());
ensureIsFunctionOrAsync(afterAllFunction, 'afterAll');
currentDeclarationSuite.afterAll({
fn: afterAllFunction,
Expand Down

0 comments on commit ab116fb

Please sign in to comment.