feat(spy): add option to respy

will not throw error if spyOn called on a spy

fixes #931
This commit is contained in:
guy-mograbi-at-gigaspaces
2015-10-24 08:37:33 +03:00
parent 48f42eaa7d
commit e7dbc75fc2
3 changed files with 43 additions and 3 deletions

View File

@@ -270,6 +270,10 @@ getJasmineRequireObj().Env = function(j$) {
return runnableResources[currentRunnable().id].spies;
}});
this.allowRespy = function( allow ){
spyRegistry.setAllowRespy( 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.setAllowRespy = 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 spy = j$.createSpy(methodName, obj[methodName]);