当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js assert.deepEqual(actual, expected[, message])用法及代码示例


assert.deepEqual(actual, expected[, message])

历史
版本变化
v18.0.0

现在也比较正则表达式 lastIndex 属性。

v16.0.0、v14.18.0

在 Legacy 断言模式下,将状态从 Deprecated 更改为 Legacy。

v14.0.0

NaN 现在如果两边都是 NaN 则被视为相同。

v12.0.0

现在可以正确比较类型标签,并且进行了一些小的比较调整以使检查不那么令人惊讶。

v9.0.0

Error 名称和消息现在可以正确比较。

v8.0.0

还比较了SetMap 的内容。

v6.4.0、v4.7.1

现在可以正确处理类型化的数组切片。

v6.1.0、v4.5.0

具有循环引用的对象现在可以用作输入。

v5.10.1、v4.4.3

正确处理非Uint8Array 类型的数组。

v0.1.21

添加于:v0.1.21


参数

严格的断言模式

assert.deepStrictEqual() 的别名。

传统断言模式

测试 actualexpected 参数之间的深度相等性。考虑改用 assert.deepStrictEqual() assert.deepEqual() 可以产生令人惊讶的结果。

深度相等意味着子对象的可枚举"own" 属性也由以下规则递归评估。

比较细节#

  • 原始值与== 运算符, 除了NaN.如果双方都是相同的,则视为相同NaN.
  • Type tags 个对象应该相同。
  • 仅考虑 enumerable "own" properties
  • Error 名称和消息总是被比较,即使它们不是可枚举的属性。
  • Object wrappers 作为对象和展开的值进行比较。
  • Object 属性比较无序。
  • Map 键和 Set 项是无序比较的。
  • 当双方不同或双方遇到循环引用时,递归停止。
  • 实现不测试对象的 [[Prototype]]
  • Symbol 属性不进行比较。
  • WeakMap WeakSet 比较不依赖于它们的值。
  • RegExp lastIndex、标志和源始终进行比较,即使这些不是可枚举的属性。

以下示例不抛出AssertionError因为基元是使用== 运算符.

import assert from 'node:assert';
// WARNING: This does not throw an AssertionError!

assert.deepEqual('+00000000', false);const assert = require('node:assert');
// WARNING: This does not throw an AssertionError!

assert.deepEqual('+00000000', false);

"Deep" 相等意味着子对象的可枚举"own" 属性也被评估:

import assert from 'node: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

// Values of b are different:
assert.deepEqual(obj1, obj2);
// AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } }

assert.deepEqual(obj1, obj3);
// OK

// Prototypes are ignored:
assert.deepEqual(obj1, obj4);
// AssertionError: { a: { b: 1 } } deepEqual {}const assert = require('node: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

// Values of b are different:
assert.deepEqual(obj1, obj2);
// AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } }

assert.deepEqual(obj1, obj3);
// OK

// Prototypes are ignored:
assert.deepEqual(obj1, obj4);
// AssertionError: { a: { b: 1 } } deepEqual {}

如果这些值不相等,则会抛出一个 AssertionError ,并将 message 属性设置为等于 message 参数的值。如果 message 参数未定义,则分配默认错误消息。如果 message 参数是 Error 的实例,那么它将被抛出而不是 AssertionError

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 assert.deepEqual(actual, expected[, message])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。