node.js学习之断言assert的使用示例

2020-06-17 07:05:15易采站长站整理
】比较的是属性值,而非引用,这是与
equal()
不同的地方。

【注意!!】

deepEqual()
只测试可枚举的自身属性,不测试对象的原型、连接符、或不可枚举的属性(这些情况使用
assert.deepStrictEqual() 
,稍后会总结到)


const son1 = Object.create(obj1),
son2 = Object.create(obj2);

son1.name="Summer";
son2.name="Summer";

assert.deepEqual(son1,son2,"actual unequal to expected");
// 断言通过

上面代码中 son1 和 son2 分别继承与两个不同的对象,都拥有 name 为 “Summer” 的属性,最后的的结果是通过,说明【

deepEqual()
不测试对象的原型】


const ena = {}, enb = {};
Object.defineProperties(ena,{
name:{
value:"Blue"
},
hobby:{
value:"foo",
enumerable:false //可枚举性设置为false
}
});
Object.defineProperties(enb,{
name:{
value:"Blue"
},
hobby:{
value:"bar",
enumerable:false //可枚举性设置为false
}
})
assert.deepEqual(ena,enb,"actual unequal to expected")
//ok,actual equal to expected

上面代码中 ena 和 enb 用于相同的可枚举属性【name】,有着值不同的不可枚举属性【hobby】,说明【deepEqual()不测试对象的不可枚举的属性】

四. 判断预期值和实际值全等(===)

这组测试函数是用于判断预期值和实际值是否深度相等的,内部使用的是(===),所以对象的原型也会进行比较,值得类型也是比较的范围。这组也有两个测试函数。

4.1 assert.deepStrictEqual(actual, expected[, message])

由于内部使用的是全等(===),所以对象的原型也会计入比较的范围


const obj1 = { name: "foo", gender: "men" },
obj2 = { name: "bar", gender: "men" }
const son1 = Object.create(obj1),
son2 = Object.create(obj2);
son1.name = "Summer";
son2.name = "Summer";
assert.deepEqual(son1, son2, "actual unequal to expected");
//断言通过
assert.deepStrictEqual(son1, son2, "actual unequal to expected")
//AssertionError [ERR_ASSERTION]: actual unequal to expected

上面代码使用了

deepEqual()
deepStrictEqual()
进行了断言测试,son1 和 son2 分别继承与两个不同的对象,但是拥有相同的属性值。可以看出【
deepEqual()
是不会考虑对象的原型的,
deepStrictEqual()