Merge branch 'issue-931-respy' of https://github.com/guy-mograbi-at-gigaspaces/jasmine into guy-mograbi-at-gigaspaces-issue-931-respy

- Merges #953
- Fixes #931
This commit is contained in:
Gregg Van Hove
2016-02-18 11:09:49 -08:00
4 changed files with 53 additions and 6 deletions

View File

@@ -773,6 +773,10 @@ getJasmineRequireObj().Env = function(j$) {
return runnableResources[currentRunnable().id].spies;
}});
this.allowRespy = function(allow){
spyRegistry.allowRespy(allow);
};
this.spyOn = function() {
return spyRegistry.spyOn.apply(spyRegistry, arguments);
};
@@ -2006,6 +2010,10 @@ getJasmineRequireObj().SpyRegistry = function(j$) {
options = options || {};
var currentSpies = options.currentSpies || function() { return []; };
this.allowRespy = function(allow){
this.respy = allow;
};
this.spyOn = function(obj, methodName) {
if (j$.util.isUndefined(obj)) {
throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()');
@@ -2019,9 +2027,12 @@ getJasmineRequireObj().SpyRegistry = function(j$) {
throw new Error(methodName + '() method does not exist');
}
if (obj[methodName] && j$.isSpy(obj[methodName])) {
//TODO?: should this return the current spy? Downside: may cause user confusion about spy state
throw new Error(methodName + ' has already been spied upon');
if (obj[methodName] && j$.isSpy(obj[methodName]) ) {
if ( !!this.respy ){
return obj[methodName];
}else {
throw new Error(methodName + ' has already been spied upon');
}
}
var descriptor;

View File

@@ -677,6 +677,31 @@ describe("Env integration", function() {
env.execute();
});
it('can be configured to allow respying on functions', function () {
var env = new jasmineUnderTest.Env(),
foo = {
bar: function () {
return 1;
}
};
env.allowRespy(true);
env.describe('test suite', function(){
env.it('spec 0', function(){
env.spyOn(foo,'bar');
var error = null;
expect(function() {
env.spyOn(foo, 'bar');
}).not.toThrow();
});
});
env.execute();
});
it('removes all spies added in a spec after the spec is complete', function(done) {
var env = new jasmineUnderTest.Env(),
originalFoo = function() {},

View File

@@ -269,6 +269,10 @@ getJasmineRequireObj().Env = function(j$) {
return runnableResources[currentRunnable().id].spies;
}});
this.allowRespy = function(allow){
spyRegistry.allowRespy(allow);
};
this.spyOn = function() {
return spyRegistry.spyOn.apply(spyRegistry, arguments);
};

View File

@@ -4,6 +4,10 @@ getJasmineRequireObj().SpyRegistry = function(j$) {
options = options || {};
var currentSpies = options.currentSpies || function() { return []; };
this.allowRespy = function(allow){
this.respy = allow;
};
this.spyOn = function(obj, methodName) {
if (j$.util.isUndefined(obj)) {
throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()');
@@ -17,9 +21,12 @@ getJasmineRequireObj().SpyRegistry = function(j$) {
throw new Error(methodName + '() method does not exist');
}
if (obj[methodName] && j$.isSpy(obj[methodName])) {
//TODO?: should this return the current spy? Downside: may cause user confusion about spy state
throw new Error(methodName + ' has already been spied upon');
if (obj[methodName] && j$.isSpy(obj[methodName]) ) {
if ( !!this.respy ){
return obj[methodName];
}else {
throw new Error(methodName + ' has already been spied upon');
}
}
var descriptor;