add option to shallow clone args in call tracker

This commit is contained in:
Aaron DEcker
2015-12-22 00:27:51 -05:00
parent 79206ccff5
commit 3e91ac0889
4 changed files with 41 additions and 3 deletions

View File

@@ -49,7 +49,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
j$.errors = jRequire.errors();
j$.Any = jRequire.Any(j$);
j$.Anything = jRequire.Anything(j$);
j$.CallTracker = jRequire.CallTracker();
j$.CallTracker = jRequire.CallTracker(j$);
j$.MockDate = jRequire.MockDate();
j$.Clock = jRequire.Clock();
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();

View File

@@ -102,4 +102,20 @@ describe("CallTracker", function() {
expect(callTracker.all()).toEqual([]);
expect(callTracker.mostRecent()).toBeFalsy();
});
it("allows object arguments to be shallow cloned", function() {
var callTracker = new jasmineUnderTest.CallTracker();
callTracker.saveArgumentsByValue();
var originalArg = {"foo": "bar"};
callTracker.track({object: {}, args: [originalArg]});
expect(callTracker.mostRecent().args[0]).not.toBe(originalArg);
var anotherArg = {"foo": "bar", "baz": "foo"};
callTracker.track({object: {}, args: [
anotherArg, false, undefined, null, NaN, "", 0, 1.0, ['test', 123]
]});
expect(callTracker.mostRecent().args[0]).not.toBe(anotherArg);
});
});

View File

@@ -1,9 +1,26 @@
getJasmineRequireObj().CallTracker = function() {
getJasmineRequireObj().CallTracker = function(j$) {
function CallTracker() {
var calls = [];
var opts = {};
function argCloner(context) {
debugger;
var clonedArgs = [];
j$.util.argsToArray(context.args).forEach(function(arg) {
if(Object.prototype.toString.apply(arg) === '[object Object]') {
clonedArgs.push(j$.util.clone(arg));
} else {
clonedArgs.push(arg);
}
});
context.args = clonedArgs;
}
this.track = function(context) {
if(opts.cloneArgs) {
argCloner(context);
}
calls.push(context);
};
@@ -44,6 +61,11 @@ getJasmineRequireObj().CallTracker = function() {
this.reset = function() {
calls = [];
};
this.saveArgumentsByValue = function() {
opts.cloneArgs = true;
};
}
return CallTracker;

View File

@@ -27,7 +27,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
j$.errors = jRequire.errors();
j$.Any = jRequire.Any(j$);
j$.Anything = jRequire.Anything(j$);
j$.CallTracker = jRequire.CallTracker();
j$.CallTracker = jRequire.CallTracker(j$);
j$.MockDate = jRequire.MockDate();
j$.Clock = jRequire.Clock();
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();