diff --git a/spec/core/CallTrackerSpec.js b/spec/core/CallTrackerSpec.js index 474f674f..064152be 100644 --- a/spec/core/CallTrackerSpec.js +++ b/spec/core/CallTrackerSpec.js @@ -30,6 +30,18 @@ describe('CallTracker', function() { expect(callTracker.argsFor(1)).toEqual([0, 'foo']); }); + it("tracks the 'this' object from each execution", function() { + var callTracker = new jasmineUnderTest.CallTracker(); + + var this0 = {}, + this1 = {}; + callTracker.track({ object: this0, args: [] }); + callTracker.track({ object: this1, args: [] }); + + expect(callTracker.thisFor(0)).toBe(this0); + expect(callTracker.thisFor(1)).toBe(this1); + }); + it('returns any empty array when there was no call', function() { var callTracker = new jasmineUnderTest.CallTracker(); diff --git a/src/core/CallTracker.js b/src/core/CallTracker.js index 8613a250..005849ab 100644 --- a/src/core/CallTracker.js +++ b/src/core/CallTracker.js @@ -49,6 +49,19 @@ getJasmineRequireObj().CallTracker = function(j$) { return call ? call.args : []; }; + /** + * Get the "this" object that was passed to a specific invocation of this spy. + * @name Spy#calls#thisFor + * @since 3.7.1 + * @function + * @param {Integer} index The 0-based invocation index. + * @return {Object?} + */ + this.thisFor = function(index) { + var call = calls[index]; + return call ? call.object : undefined; + }; + /** * Get the raw calls array for this spy. * @name Spy#calls#all