assert.deepEqual(actual, expected[, message])
深度比較 actual 和 expected 參數,使用比較運算符(==)比較原始值。
只考慮可枚舉的“自身”屬性。deepEqual() 的實現不測試對象的原型,連接符號,或不可枚舉的屬性。這會導致一些潛在的出人意料的結果。例如,下面的例子不會拋出 AssertionError,因為 Error 對象的屬性是不可枚舉:
// WARNING: This does not throw an AssertionError!
assert.deepEqual(Error('a'), Error('b'));
深度比較意味着子對象的可枚舉“自身”的屬性也會進行評估:
const assert = require('assert');
const obj1 = {
a: {
b: 1
}
};
const obj2 = {
a: {
b: 2
}
};
const obj3 = {
a: {
b: 1
}
}
const obj4 = Object.create(obj1);
assert.deepEqual(obj1, obj1);
// OK, object is equal to itself
assert.deepEqual(obj1, obj2);
// AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } }
// values of b are different
assert.deepEqual(obj1, obj3);
// OK, objects are equal
assert.deepEqual(obj1, obj4);
// AssertionError: { a: { b: 1 } } deepEqual {}
// Prototypes are ignored
如果這兩個值不相等,將會拋出一個帶有 message 屬性(等於該 message 參數的值)的 AssertionError。如果 message 參數為 undefined,將會分配一個默認的錯誤消息。