Skip to content

Commit

Permalink
backport: backport: backport: Check type of callCount argument and er…
Browse files Browse the repository at this point in the history
…ror accordingly

This is to fixes sinonjs#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!
  • Loading branch information
cincodenada committed Nov 5, 2021
1 parent 1a67742 commit 1b8ec19
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
10 changes: 8 additions & 2 deletions lib/sinon/assert.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
12 changes: 12 additions & 0 deletions test/assert-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit 1b8ec19

Please sign in to comment.