Better primitives detection for saveArgsByValue

This commit is contained in:
ksvitkovsky
2017-08-04 11:12:22 +04:00
committed by Gregg Van Hove
parent 4d18e63b0f
commit f58002f0a6
2 changed files with 16 additions and 3 deletions

View File

@@ -117,4 +117,14 @@ describe("CallTracker", function() {
expect(callTracker.mostRecent().args[1]).not.toBe(arrayArg);
expect(callTracker.mostRecent().args[1]).toEqual(arrayArg);
});
it('saves primitive arguments by value', function() {
var callTracker = new jasmineUnderTest.CallTracker(),
args = [undefined, null, false, '', /\s/, 0, 1.2, NaN];
callTracker.saveArgumentsByValue();
callTracker.track({ object: {}, args: args });
expect(callTracker.mostRecent().args).toEqual(args);
});
});

View File

@@ -11,10 +11,13 @@ getJasmineRequireObj().CallTracker = function(j$) {
var clonedArgs = [];
var argsAsArray = j$.util.argsToArray(context.args);
for(var i = 0; i < argsAsArray.length; i++) {
if(Object.prototype.toString.apply(argsAsArray[i]).match(/^\[object/)) {
clonedArgs.push(j$.util.clone(argsAsArray[i]));
} else {
var str = Object.prototype.toString.apply(argsAsArray[i]),
primitives = /^\[object (Boolean|String|RegExp|Number)/;
if (argsAsArray[i] == null || str.match(primitives)) {
clonedArgs.push(argsAsArray[i]);
} else {
clonedArgs.push(j$.util.clone(argsAsArray[i]));
}
}
context.args = clonedArgs;