assert 断言模块
提供了一组用于验证不变量的断言函数。
js
const assert = require('node:assert');
/**
* assert.ok() 的别名。
* 检查value是否为真
*/
assert(value[, message])
/**
* assert.deepStrictEqual() 的别名。严格断言模式
*/
assert.deepEqual(actual, expected[, message])
assert.deepEqual('+00000000', false);
/**
* 期望 string 输入与正则表达式不匹配。
*/
assert.doesNotMatch(string, regexp[, message])
/**
* 等待 asyncFn promise,或者,如果 asyncFn 是函数,则立即调用该函数
* 并等待返回的 promise 完成。然后会检查 promise 是否没有被拒绝。
*/
assert.doesNotReject(asyncFn[, error][, message])
(async () => {
await assert.doesNotReject(
async () => {
throw new TypeError('Wrong value');
},
SyntaxError,
);
})();
/**
* 断言函数 fn 不会抛出错误。
*/
assert.doesNotThrow(fn[, error][, message])
assert.doesNotThrow(
() => {
throw new TypeError('Wrong value');
},
SyntaxError,
);
/**
* 使用 == 操作符 测试 actual 和 expected 参数之间的浅层强制相等性。
* NaN 是特殊处理的,如果双方都是 NaN,则视为相同。
*/
assert.equal(actual, expected[, message])
assert.equal(1, 1);
// OK, 1 == 1
assert.equal(1, '1');
// OK, 1 == '1'
assert.equal(NaN, NaN);
// OK
assert.equal(1, 2);
// AssertionError: 1 == 2
/**
* 抛出带有提供的错误消息或默认错误消息的 AssertionError。
* 如果 message 参数是 Error 的实例,则将抛出错误而不是 AssertionError。
*/
assert.fail([message])
/**
* 如果 value 不是 undefined 或 null,则抛出错误
*/
assert.ifError(value)
assert.ifError(null);
// OK
assert.ifError(0);
// AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0
assert.ifError('error');
// AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error'
assert.ifError(new Error());
// AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error
/**
* 期望 string 输入与正则表达式匹配。
*/
assert.match(string, regexp[, message])
assert.match(123, /pass/);
// AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
assert.match('I will pass', /pass/);
// OK
/**
* 检验深度严格不相等。assert.deepStrictEqual() 的相反。
*/
assert.notDeepStrictEqual(actual, expected[, message])
assert.notDeepStrictEqual({ a: 1 }, { a: '1' });
// OK
/**
* 测试由 Object.is() 确定的 actual 和 expected 参数之间的严格不相等。
*/
assert.notStrictEqual(actual, expected[, message])
assert.notStrictEqual(1, 2);
// OK
assert.notStrictEqual(1, 1);
// AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to:1
/**
* 等待 asyncFn promise,或者,如果 asyncFn 是函数,则立即调用该函数
* 并等待返回的 promise 完成。然后将检查 promise 是否被拒绝。
*/
assert.rejects(asyncFn[, error][, message])
(async () => {
await assert.rejects(
async () => {
throw new TypeError('Wrong value');
},
(err) => {
assert.strictEqual(err.name, 'TypeError');
assert.strictEqual(err.message, 'Wrong value');
return true;
},
);
})();
/**
* 测试由 Object.is() 确定的 actual 和 expected 参数之间的严格相等
*/
assert.strictEqual(actual, expected[, message])
assert.strictEqual(1, 2);
// AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:1 !== 2
assert.strictEqual(1, 1);
// OK
/**
* 期望函数 fn 抛出错误。
*/
assert.throws(fn[, error][, message])
assert.throws(
() => {
throw new Error('Wrong value');
},
Error,
);
assert.throws(
() => {
throw new Error('Wrong value');
},
/^Error: Wrong value$/,
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161