I'm pretty new to JavaScript, and I have a quick question regarding the Chai library for making unit tests.
When I was studying some materials on the Chai library, I saw a statement saying:
equal
: Asserts that the target is strictly (===
) equal to the given value.eql
: Asserts that the target is deeply equal to value.I'm confused about what the difference is between strictly and deeply.
Strictly equal (or ===
) means that your are comparing exactly the same object to itself:
var myObj = {
testProperty: 'testValue'
};
var anotherReference = myObj;
expect(myObj).to.equal(anotherReference); // The same object, only referenced by another variable
expect(myObj).to.not.equal({testProperty: 'testValue'}); // Even though it has the same property and value, it is not exactly the same object
Deeply Equal on the other hand means that every property of the compared objects (and possible deep linked objects) have the same value. So:
var myObject = {
testProperty: 'testValue',
deepObj: {
deepTestProperty: 'deepTestValue'
}
}
var anotherObject = {
testProperty: 'testValue',
deepObj: {
deepTestProperty: 'deepTestValue'
}
}
var myOtherReference = myObject;
expect(myObject).to.eql(anotherObject); // is true as all properties are the same, even the inner object (deep) one
expect(myObject).to.eql(myOtherReference) // is still also true for the same reason