Skip to content

Commit

Permalink
Check type of callCount argument and error accordingly
Browse files Browse the repository at this point in the history
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 3, 2021
1 parent 7e70503 commit 42ac44f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
14 changes: 10 additions & 4 deletions lib/sinon/assert.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,16 @@ function createAssertObject() {
callCount: function assertCallCount(method, count) {
verifyIsStub(method);

if (method.callCount !== count) {
var msg = `expected %n to be called ${timesInWords(
count
)} but was called %c%C`;
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 {
assert.pass("callCount");
Expand Down
9 changes: 9 additions & 0 deletions test/assert-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1570,6 +1570,15 @@ describe("assert", function () {
);
});

it("assert.callCount exception message with non-numeric argument", function () {
this.obj.doSomething();

assert.equals(
this.message("callCount", this.obj.doSomething, "3"),
"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 42ac44f

Please sign in to comment.