share usercontext for full suite
This commit is contained in:
@@ -236,6 +236,60 @@ describe("Env integration", function() {
|
|||||||
env.execute();
|
env.execute();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("calls associated beforeAlls/afterAlls with the cascaded 'this'", function(done) {
|
||||||
|
var env = new j$.Env();
|
||||||
|
|
||||||
|
env.addReporter({jasmineDone: done});
|
||||||
|
|
||||||
|
env.describe("with beforeAll and afterAll", function() {
|
||||||
|
env.beforeAll(function() {
|
||||||
|
this.x = 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
env.it("has an x at the root", function() {
|
||||||
|
expect(this.x).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
env.describe("child that deletes", function() {
|
||||||
|
env.beforeAll(function() {
|
||||||
|
expect(this.x).toBe(1);
|
||||||
|
delete this.x;
|
||||||
|
});
|
||||||
|
|
||||||
|
env.it("has no x", function() {
|
||||||
|
expect(this.x).not.toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
env.describe("child should still have x", function() {
|
||||||
|
env.beforeAll(function(innerDone) {
|
||||||
|
expect(this.x).toBe(1);
|
||||||
|
innerDone();
|
||||||
|
});
|
||||||
|
|
||||||
|
env.it("has an x", function() {
|
||||||
|
expect(this.x).toBe(1);
|
||||||
|
delete this.x;
|
||||||
|
});
|
||||||
|
|
||||||
|
env.it("still has an x", function() {
|
||||||
|
expect(this.x).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
env.it("adds a y", function() {
|
||||||
|
this.y = 2;
|
||||||
|
expect(this.y).toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
env.it("doesn't have y that was added in sibling", function() {
|
||||||
|
expect(this.y).not.toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
env.execute();
|
||||||
|
});
|
||||||
|
|
||||||
it("Allows specifying which specs and suites to run", function(done) {
|
it("Allows specifying which specs and suites to run", function(done) {
|
||||||
var env = new j$.Env(),
|
var env = new j$.Env(),
|
||||||
calls = [],
|
calls = [],
|
||||||
|
|||||||
@@ -272,6 +272,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|||||||
description: description,
|
description: description,
|
||||||
expectationResultFactory: expectationResultFactory,
|
expectationResultFactory: expectationResultFactory,
|
||||||
queueRunnerFactory: queueRunnerFactory,
|
queueRunnerFactory: queueRunnerFactory,
|
||||||
|
userContext: function() { return suite.clonedSharedUserContext(); },
|
||||||
fn: fn
|
fn: fn
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ getJasmineRequireObj().QueueRunner = function(j$) {
|
|||||||
this.onException = attrs.onException || function() {};
|
this.onException = attrs.onException || function() {};
|
||||||
this.catchException = attrs.catchException || function() { return true; };
|
this.catchException = attrs.catchException || function() { return true; };
|
||||||
this.enforceTimeout = attrs.enforceTimeout || function() { return false; };
|
this.enforceTimeout = attrs.enforceTimeout || function() { return false; };
|
||||||
this.userContext = {};
|
this.userContext = attrs.userContext || {};
|
||||||
this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout};
|
this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ getJasmineRequireObj().Spec = function(j$) {
|
|||||||
this.fn = attrs.fn;
|
this.fn = attrs.fn;
|
||||||
this.beforeFns = attrs.beforeFns || function() { return []; };
|
this.beforeFns = attrs.beforeFns || function() { return []; };
|
||||||
this.afterFns = attrs.afterFns || function() { return []; };
|
this.afterFns = attrs.afterFns || function() { return []; };
|
||||||
|
this.userContext = attrs.userContext || function() { return {}; };
|
||||||
this.onStart = attrs.onStart || function() {};
|
this.onStart = attrs.onStart || function() {};
|
||||||
this.exceptionFormatter = attrs.exceptionFormatter || function() {};
|
this.exceptionFormatter = attrs.exceptionFormatter || function() {};
|
||||||
this.getSpecName = attrs.getSpecName || function() { return ''; };
|
this.getSpecName = attrs.getSpecName || function() { return ''; };
|
||||||
@@ -53,7 +54,8 @@ getJasmineRequireObj().Spec = function(j$) {
|
|||||||
fns: allFns,
|
fns: allFns,
|
||||||
onException: onException,
|
onException: onException,
|
||||||
onComplete: complete,
|
onComplete: complete,
|
||||||
enforceTimeout: function() { return true; }
|
enforceTimeout: function() { return true; },
|
||||||
|
userContext: this.userContext()
|
||||||
});
|
});
|
||||||
|
|
||||||
function onException(e) {
|
function onException(e) {
|
||||||
|
|||||||
@@ -86,7 +86,8 @@ getJasmineRequireObj().Suite = function() {
|
|||||||
|
|
||||||
this.queueRunner({
|
this.queueRunner({
|
||||||
fns: allFns,
|
fns: allFns,
|
||||||
onComplete: complete
|
onComplete: complete,
|
||||||
|
userContext: this.sharedUserContext()
|
||||||
});
|
});
|
||||||
|
|
||||||
function complete() {
|
function complete() {
|
||||||
@@ -113,6 +114,29 @@ getJasmineRequireObj().Suite = function() {
|
|||||||
return foundActive;
|
return foundActive;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Suite.prototype.sharedUserContext = function() {
|
||||||
|
if (!this.sharedContext) {
|
||||||
|
this.sharedContext = this.parentSuite ? clone(this.parentSuite.sharedUserContext()) : {};
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.sharedContext;
|
||||||
|
};
|
||||||
|
|
||||||
|
Suite.prototype.clonedSharedUserContext = function() {
|
||||||
|
return clone(this.sharedUserContext());
|
||||||
|
};
|
||||||
|
|
||||||
|
function clone(obj) {
|
||||||
|
var clonedObj = {};
|
||||||
|
for (var prop in obj) {
|
||||||
|
if (obj.hasOwnProperty(prop)) {
|
||||||
|
clonedObj[prop] = obj[prop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return clonedObj;
|
||||||
|
}
|
||||||
|
|
||||||
return Suite;
|
return Suite;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user