Describe the bug
Asserting calledWith ignores mismatched properties if they keys are JavaScript symbols.
To Reproduce
Steps to reproduce the behavior:
var sinon = require('sinon');
var mock = sinon.mock();
mock({
[Symbol("a")]: true
});
sinon.assert.calledWith(
mock,
{
[Symbol("a")]: false
}
);
Expected behavior
The above script should throw an AssertError because the mock was called with an object containing a true value when we were expecting a false value. It should behave similarly to this example that uses non-symbolic keys:
var sinon = require('sinon');
var mock = sinon.mock();
mock({
a: true
});
sinon.assert.calledWith(
mock,
{
a: false
}
);

Context (please complete the following information):
- Library version: 7.2.3
- Environment: Node.js v10.8.0
- Other libraries you are using: None; I reproduced this issue in a newly initialized npm project.
Additional context
I started working on a solution, but I wanted to raise an issue before opening pull requests like the contributing guide suggests to make sure I'm going down the right path. Using this change for samsam and this change for formatio, I get the behavior I expected for the script in the To Reproduce section:

Because symbols are unique, this:
var sinon = require('sinon');
var mock = sinon.mock();
mock({
[Symbol("a")]: true
});
sinon.assert.calledWith(
mock,
{
[Symbol("a")]: true
}
);
will throw an AssertError (thanks @pettyalex for pointing this out):

This, however, will not throw an AssertError:
var sinon = require('sinon');
var mock = sinon.mock();
const symbol = Symbol("a");
mock({
[symbol]: true
});
sinon.assert.calledWith(
mock,
{
[symbol]: true
}
);
Unfortunately, the samsam change breaks one unit test:

This is because arguments has a property symbol called iterator:
> function test() { return Object.getOwnPropertySymbols(arguments) } test();
[ Symbol(Symbol.iterator) ]
Describe the bug
Asserting
calledWithignores mismatched properties if they keys are JavaScript symbols.To Reproduce
Steps to reproduce the behavior:
Expected behavior
The above script should throw an
AssertErrorbecause the mock was called with an object containing atruevalue when we were expecting afalsevalue. It should behave similarly to this example that uses non-symbolic keys:Context (please complete the following information):
Additional context
I started working on a solution, but I wanted to raise an issue before opening pull requests like the contributing guide suggests to make sure I'm going down the right path. Using this change for samsam and this change for formatio, I get the behavior I expected for the script in the To Reproduce section:
Because symbols are unique, this:
will throw an
AssertError(thanks @pettyalex for pointing this out):This, however, will not throw an
AssertError:Unfortunately, the samsam change breaks one unit test:
This is because
argumentshas a property symbol callediterator: