0đź‘Ť
First: Just because you can negate any assertion with .not doesn’t mean you should. With great power comes great responsibility. It’s often best to assert that the one expected output was produced, rather than asserting that one of countless unexpected outputs wasn’t produced.
Equal asserts that the target is strictly (===) equal to the given val.
expect(2).to.equal(2); // Recommended
expect(2).to.not.equal(1); // Not recommended
Ok, now, in your case you may want to add .deep earlier in the chain to use deep equality instead:
// Target object deeply (but not strictly) equals `{a: 1}`
expect({a: 1}).to.deep.equal({a: 1});
expect({a: 1}).to.not.equal({a: 1});
// Target array deeply (but not strictly) equals `[1, 2]`
expect([1, 2]).to.deep.equal([1, 2]);
expect([1, 2]).to.not.equal([1, 2]);
Explaining why is easy:
1 === 1 // These are primitives, they hold the same reference - they are strictly equal
1 == '1' // These are two different primitives, through type coercion they hold the same value - they are loosely equal
{ a: 1 } !== { a: 1 } // These are two different objects, they hold different references and so are not strictly equal - even though they hold the same values inside
{ a: 1 } != { a: 1 } // They have the same type, meaning loose equality performs the same check as strict equality - they are still not equal.
Chai “to.equal” use “deep-eql” algorithm => package.
var deepEql = require("deep-eql");
deepEql({ a: 1 }, { a: 1 }) === true // deepEql can determine that they share the same keys and those keys share the same values, therefore they are deeply equal!
Do you want to know more about chai methods? Their docs are amazing.
- [Vuejs]-Why does $router.push({ name: 'summoner', params: { summonerName: summonerName }}) leads to url /summoner/username/ instead of /summoner/username?
- [Vuejs]-How to use onclick events when using Tabulator Ajax with VueJS?
Source:stackexchange.com