From 1b8ec1918c688bb6ec8f6e7d1267f736aa1eb71e Mon Sep 17 00:00:00 2001 From: Joel Bradshaw Date: Wed, 3 Nov 2021 10:47:54 -0700 Subject: [PATCH] backport: backport: backport: Check type of callCount argument and error accordingly This is to fixes #2408, which could result in error messages like "expected spy to be called 10 times but was called 10 times". Now we will instead say "expected '10' to be a number, but was of type string", which is much clearer! --- lib/sinon/assert.js | 10 ++++++++-- test/assert-test.js | 12 ++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) 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 0f4f0d5eb..451ea6285 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();