Ensure focused tests are only run once

Required duplicating some of the logic for constructing a suite from
describe so that we could mark a suite as focused in fdescribe, but
otherwise this prevents focused tests from being run more than once.

[#73742944]
This commit is contained in:
Greg Cobb and Tim Jarratt
2014-08-28 17:54:42 -07:00
parent 14824b5f9e
commit 08a35d134d
2 changed files with 48 additions and 5 deletions

View File

@@ -295,11 +295,44 @@ getJasmineRequireObj().Env = function(j$) {
};
this.fdescribe = function(description, specDefinitions) {
var suite = this.describe(description, specDefinitions);
focusedRunnables.push(suite.id);
var suite = suiteFactory(description);
suite.isFocused = true;
var parentSuite = currentDeclarationSuite;
parentSuite.addChild(suite);
currentDeclarationSuite = suite;
var declarationError = null;
try {
specDefinitions.call(suite);
} catch (e) {
declarationError = e;
}
if (declarationError) {
this.it('encountered a declaration exception', function() {
throw declarationError;
});
}
currentDeclarationSuite = parentSuite;
if (!hasFocusedAncestor(parentSuite)) {
focusedRunnables.push(suite.id);
}
return suite;
};
function hasFocusedAncestor(suite) {
while (suite) {
if (suite.isFocused) {
return true;
}
suite = suite.parentSuite;
}
return false;
}
var runnablesExplictlySet = false;
var runnablesExplictlySetGetter = function(){
@@ -361,7 +394,11 @@ getJasmineRequireObj().Env = function(j$) {
var focusedRunnables = [];
this.fit = function(description, fn ){
var spec = this.it(description, fn);
focusedRunnables.push(spec.id);
if (!hasFocusedAncestor(currentDeclarationSuite)) {
focusedRunnables.push(spec.id);
}
return spec;
};