diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index fc1cc6f1..b04cf054 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -5323,10 +5323,18 @@ getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { return ' ' + j$.pp(argsForCall); }); + var diffs = actual.calls.allArgs().map(function(argsForCall, callIx) { + var diffBuilder = new j$.DiffBuilder(); + util.equals(argsForCall, expectedArgs, customEqualityTesters, diffBuilder); + return 'Call ' + callIx + ':\n' + + diffBuilder.getMessage().replace(/^/mg, ' '); + }); + return 'Expected spy ' + actual.and.identity + ' to have been called with:\n' + ' ' + j$.pp(expectedArgs) + '\n' + '' + 'but actual calls were:\n' + - prettyPrintedCalls.join(',\n') + '.'; + prettyPrintedCalls.join(',\n') + '.\n\n' + + diffs.join('\n'); }; } diff --git a/spec/core/matchers/toHaveBeenCalledWithSpec.js b/spec/core/matchers/toHaveBeenCalledWithSpec.js index 534eca46..4ac7e074 100644 --- a/spec/core/matchers/toHaveBeenCalledWithSpec.js +++ b/spec/core/matchers/toHaveBeenCalledWithSpec.js @@ -43,19 +43,33 @@ describe("toHaveBeenCalledWith", function() { }); it("fails when the actual was called with different parameters", function() { - var util = { - contains: jasmine.createSpy('delegated-contains').and.returnValue(false) - }, + var util = jasmineUnderTest.matchersUtil, matcher = jasmineUnderTest.matchers.toHaveBeenCalledWith(util), calledSpy = new jasmineUnderTest.Env().createSpy('called spy'), result; calledSpy('a'); calledSpy('c', 'd'); + calledSpy('a', 'b', 'c'); result = matcher.compare(calledSpy, 'a', 'b'); expect(result.pass).toBe(false); - expect(result.message()).toEqual("Expected spy called spy to have been called with:\n [ 'a', 'b' ]\nbut actual calls were:\n [ 'a' ],\n [ 'c', 'd' ]."); + expect(result.message()).toEqual( + "Expected spy called spy to have been called with:\n" + + " [ 'a', 'b' ]\n" + + "but actual calls were:\n" + + " [ 'a' ],\n" + + " [ 'c', 'd' ],\n" + + " [ 'a', 'b', 'c' ].\n\n" + + "Call 0:\n" + + " Expected $.length = 1 to equal 2.\n" + + " Expected $[1] = undefined to equal 'b'.\n" + + "Call 1:\n" + + " Expected $[0] = 'c' to equal 'a'.\n" + + " Expected $[1] = 'd' to equal 'b'.\n" + + "Call 2:\n" + + " Expected $.length = 3 to equal 2.\n" + + " Unexpected $[2] = 'c' in array."); }); it("throws an exception when the actual is not a spy", function() { diff --git a/src/core/matchers/toHaveBeenCalledWith.js b/src/core/matchers/toHaveBeenCalledWith.js index 79197813..277b33f3 100644 --- a/src/core/matchers/toHaveBeenCalledWith.js +++ b/src/core/matchers/toHaveBeenCalledWith.js @@ -45,10 +45,18 @@ getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { return ' ' + j$.pp(argsForCall); }); + var diffs = actual.calls.allArgs().map(function(argsForCall, callIx) { + var diffBuilder = new j$.DiffBuilder(); + util.equals(argsForCall, expectedArgs, customEqualityTesters, diffBuilder); + return 'Call ' + callIx + ':\n' + + diffBuilder.getMessage().replace(/^/mg, ' '); + }); + return 'Expected spy ' + actual.and.identity + ' to have been called with:\n' + ' ' + j$.pp(expectedArgs) + '\n' + '' + 'but actual calls were:\n' + - prettyPrintedCalls.join(',\n') + '.'; + prettyPrintedCalls.join(',\n') + '.\n\n' + + diffs.join('\n'); }; }