Testing with Mocha: Array Comparison
The Problem
While writing a Mocha test suite for array comparison, I encountered an issue. Here is the test suite:
describe("Array comparison", function () {
"use strict"
it("should return true if two arrays have the same values", function () {
var myArray = ["a", "b", "c"]
expect(myArray).to.equal(["a", "b", "c"])
})
})
Contrary to my expectations, this test fails, producing the following error:
AssertionError: expected ['a', 'b', 'c'] to equal ['a', 'b', 'c']
My Explanation
Why don’t arrays compare like other values? It’s because the typeof
array is an object. In Mocha, to.equal
doesn’t indicate that the operands are semantically equal; rather, it checks if they refer to the exact same object. In other words, the test fails because myArray
is not the exact same object as ['a', 'b', 'c']
.
Possible Solutions
- Use
.eql
for “loose equality” to deeply compare values. - Use
.deep.equal
, which tests whether the operands are equivalent but not necessarily the same object. - Check
.members
in the array instead. - Convert the array to a string and then compare.
References
I hope this revised version better communicates your insights and solutions.