使用Mocha進行測試:陣列比較
問題
在為陣列比較寫一個Mocha測試套件時,我遇到了一個問題。這是測試套件:
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"])
})
})
與我的期望相反,這個測試失敗了,產生以下的錯誤:
AssertionError: expected ['a', 'b', 'c'] to equal ['a', 'b', 'c']
我的解釋
為什麼陣列不像其他值那樣進行比較呢?這是因為陣列的typeof
是物件。在Mocha中,to.equal
並不表示操作數在語義上是相等的;相反,它檢查他們是否參考了相同的物件。換句話說,這個測試失敗是因為myArray
並不是與['a', 'b', 'c']
完全相同的物件。
可能的解決方案
- 使用
.eql
進行”寬鬆相等”以深度比較值。 - 使用
.deep.equal
,這檢查操作數是否在語義上相等,但不一定是相同的物件。 - 在陣列中檢查
.members
。 - 將陣列轉換為字符串然後進行比較。
參考
我希望這個修改的版本更好地傳達了您的見解和解決方案。