Jasmine should recover gracefully when there are errors in describe functions.
This commit is contained in:
parent
803a2fb2ba
commit
ed49104fad
|
@ -1083,4 +1083,55 @@ describe("jasmine spec running", function () {
|
||||||
expect(exceptionMessage).toEqual('explodes function should not have been called');
|
expect(exceptionMessage).toEqual('explodes function should not have been called');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should recover gracefully when there are errors in describe functions", function() {
|
||||||
|
var specs = [];
|
||||||
|
var superSimpleReporter = new jasmine.Reporter();
|
||||||
|
superSimpleReporter.reportSpecResults = function(spec) {
|
||||||
|
specs.push("Spec: " + spec.getFullName());
|
||||||
|
var results = spec.results().getItems();
|
||||||
|
for (var i = 0; i < results.length; i++) {
|
||||||
|
var result = results[i];
|
||||||
|
specs.push("Result: " + result);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
env.describe("outer1", function() {
|
||||||
|
env.describe("inner1", function() {
|
||||||
|
env.it("should thingy", function() {
|
||||||
|
this.expect(true).toEqual(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
throw new Error("fake error");
|
||||||
|
});
|
||||||
|
|
||||||
|
env.describe("inner2", function() {
|
||||||
|
env.it("should other thingy", function() {
|
||||||
|
this.expect(true).toEqual(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} catch(e) {}
|
||||||
|
|
||||||
|
env.describe("outer2", function() {
|
||||||
|
env.it("should xxx", function() {
|
||||||
|
this.expect(true).toEqual(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
env.addReporter(superSimpleReporter);
|
||||||
|
env.execute();
|
||||||
|
|
||||||
|
expect(specs).toEqual([
|
||||||
|
'Spec: outer1 inner1 should thingy.',
|
||||||
|
'Result: Passed.',
|
||||||
|
'Spec: outer1 encountered a declaration exception.',
|
||||||
|
'Result: Error: fake error',
|
||||||
|
'Spec: outer1 inner2 should other thingy.',
|
||||||
|
'Result: Passed.',
|
||||||
|
'Spec: outer2 should xxx.',
|
||||||
|
'Result: Passed.'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
13
src/Env.js
13
src/Env.js
|
@ -96,10 +96,21 @@ jasmine.Env.prototype.describe = function(description, specDefinitions) {
|
||||||
|
|
||||||
this.currentSuite = suite;
|
this.currentSuite = suite;
|
||||||
|
|
||||||
specDefinitions.call(suite);
|
var declarationError = null;
|
||||||
|
try {
|
||||||
|
specDefinitions.call(suite);
|
||||||
|
} catch(e) {
|
||||||
|
declarationError = e;
|
||||||
|
}
|
||||||
|
|
||||||
this.currentSuite = parentSuite;
|
this.currentSuite = parentSuite;
|
||||||
|
|
||||||
|
if (declarationError) {
|
||||||
|
this.it("encountered a declaration exception", function() {
|
||||||
|
throw declarationError;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return suite;
|
return suite;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,10 @@ jasmine.MessageResult = function(text) {
|
||||||
this.trace = new Error(); // todo: test better
|
this.trace = new Error(); // todo: test better
|
||||||
};
|
};
|
||||||
|
|
||||||
|
jasmine.MessageResult.prototype.toString = function() {
|
||||||
|
return this.text;
|
||||||
|
};
|
||||||
|
|
||||||
jasmine.ExpectationResult = function(params) {
|
jasmine.ExpectationResult = function(params) {
|
||||||
this.type = 'ExpectationResult';
|
this.type = 'ExpectationResult';
|
||||||
this.matcherName = params.matcherName;
|
this.matcherName = params.matcherName;
|
||||||
|
@ -71,6 +75,10 @@ jasmine.ExpectationResult = function(params) {
|
||||||
this.trace = this.passed_ ? '' : new Error(this.message);
|
this.trace = this.passed_ ? '' : new Error(this.message);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
jasmine.ExpectationResult.prototype.toString = function () {
|
||||||
|
return this.message;
|
||||||
|
};
|
||||||
|
|
||||||
jasmine.ExpectationResult.prototype.passed = function () {
|
jasmine.ExpectationResult.prototype.passed = function () {
|
||||||
return this.passed_;
|
return this.passed_;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue