diff --git a/lib/sinon/assert.js b/lib/sinon/assert.js index 12d9676e2..bb25f5f6f 100644 --- a/lib/sinon/assert.js +++ b/lib/sinon/assert.js @@ -131,8 +131,14 @@ assert = { callCount: function assertCallCount(method, count) { verifyIsStub(method); - if (method.callCount !== count) { - var msg = "expected %n to be called " + timesInWords(count) + + var msg; + if (typeof count !== "number") { + msg = + `expected ${format(count)} to be a number ` + + `but was of type ${typeof count}`; + failAssertion(this, msg); + } else if (method.callCount !== count) { + msg = "expected %n to be called " + timesInWords(count) + " but was called %c%C"; failAssertion(this, method.printf(msg)); } else { diff --git a/test/assert-test.js b/test/assert-test.js index edcf17a50..5b4137dfd 100644 --- a/test/assert-test.js +++ b/test/assert-test.js @@ -1345,6 +1345,18 @@ describe("assert", function () { "once\n doSomething()"); }); + it("assert.callCount exception message with non-numeric argument", function () { + this.obj.doSomething(); + + assert.equals( + this.message("callCount", this.obj.doSomething, "3").replace( + / at.*/g, + "" + ), + "expected '3' to be a number but was of type string" + ); + }); + it("assert.calledOnce exception message", function () { this.obj.doSomething(); this.obj.doSomething();