code: function spy(){
  		var call = new SpyCall( this, Slice.call( arguments ), spy );
  		spy.history.push( call );
  		spy.scope = call.scope;
  		spy.args = call.args;
  		spy.order = call.order;
  		spy.overall = call.overall;
  		spy.trace = call.trace;
  		spy.count++;
  		spy.returnValue = spy.option( 'returnValue' );
  
  		// Callback for when spy gets triggered
  		if ( spy.options.onCall ) {
  			spy.returnValue = spy.options.onCall.apply( spy.scope, spy.args );
  		}
  
  		// Pass trigger through to the original function if allowed
  		if ( spy.wrapped && spy.options.passthru ) {
  			spy.returnValue = spy.original.apply( spy.scope, spy.args );
  
  			if ( spy.options.hasOwnProperty( 'returnValue' ) ) {
  				spy.returnValue = spy.option( 'returnValue' );
  			}
  		}
  
  		// After trigger callback
  		if ( spy.options.afterCall ) {
  			spy.returnValue = spy.options.afterCall.apply( spy.scope, spy.args );
  		}
  
  		return spy.returnValue;
  	}
docs: Spy replacement