feat(spy): add option to respy
will not throw error if spyOn called on a spy fixes #931
This commit is contained in:
@@ -677,6 +677,35 @@ describe("Env integration", function() {
|
||||
env.execute();
|
||||
});
|
||||
|
||||
it('allows to respy functions', function () {
|
||||
|
||||
var env = new j$.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;
|
||||
|
||||
try {
|
||||
env.spyOn(foo, 'bar'); // no exception thrown
|
||||
}catch(e){
|
||||
error = e;
|
||||
}
|
||||
expect(error).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
env.execute();
|
||||
});
|
||||
|
||||
it('removes all spies added in a spec after the spec is complete', function(done) {
|
||||
var env = new j$.Env(),
|
||||
originalFoo = function() {},
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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]);
|
||||
|
||||
Reference in New Issue
Block a user