Node.js Assertion API All In One
Node.js Assertion API All In One
Node.js 断言 API
严格模式
In strict assertion mode, non-strict methods behave like their corresponding strict methods.
For example, assert.deepEqual() will behave like assert.deepStrictEqual().
在严格断言模式下,非严格方法的行为与其相应的严格方法类似。
例如,assert.deepEqual() 的行为类似于 assert.deepStrictEqual()。
https://nodejs.org/api/assert.html#strict-assertion-mode
use "strict";
// js module 开启严格模式
(() => {
use "strict";
// js function 开启严格模式
})();
Assert API
- CJS
// const assert = require('node:assert').strict;
const assert = require('node:assert/strict');
assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]);
- ESM
// import assert from 'node:assert/strict';
import { strict as assert } from 'node:assert';
assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]);
https://nodejs.org/api/assert.html#assert
demos
$ node ./esm-assert.js
node:internal/process/esm_loader:108
internalBinding('errors').triggerUncaughtException(
^
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
+ actual - expected ... Lines skipped
[
[
[
1,
2,
+ 3
- '3'
]
...
4,
5
]
at file:///home/eric/Desktop/node-playground/esm-assert.js:6:8
at ModuleJob.run (node:internal/modules/esm/module_job:194:25) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: [ [ [ 1, 2, 3 ] ], 4, 5 ],
expected: [ [ [ 1, 2, '3' ] ], 4, 5 ],
operator: 'deepStrictEqual'
}
Node.js v18.18.0

import * as assert from 'node:assert/strict';
// Comparing primitive values:
assert.equal(3 + 4, 7);
assert.equal('abc'.toUpperCase(), 'ABC');
// Comparing objects:
assert.notEqual({prop: 1}, {prop: 1});
// shallow comparison
assert.deepEqual({prop: 1}, {prop: 1});
// deep comparison
assert.notDeepEqual({prop: 1}, {prop: 2});
// not deep comparison
(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!
CJS error

fix:
# .js => .mjs => ESM
# .cjs => CJS
$ mv cjs-assert.js cjs-assert.cjs

console.assert()
The console.assert() method writes an error message to the console if the assertion is false.
If the assertion is true, nothing happens.
assert(assertion, obj1)
assert(assertion, obj1, obj2)
assert(assertion, obj1, obj2, /* …, */ objN)
assert(assertion, msg)
assert(assertion, msg, subst1)
assert(assertion, msg, subst1, /* …, */ substN)
test
const errorMsg = "the # is not even";
for (let number = 2; number <= 5; number++) {
console.log(`the # is ${number}`);
console.assert(number % 2 === 0, "%o", { number, errorMsg });
}

https://developer.mozilla.org/en-US/docs/Web/API/console/assert
When passing a string to one of the console object's methods that accepts a string (such as log()), you may use these substitution strings:
%o or %O
Outputs a JavaScript object.
Clicking the object name opens more information about it in the inspector.
%d or %i
Outputs an integer.
Number formatting is supported, for example console.log("Foo %.2d", 1.1) will output the number as two significant figures with a leading 0: Foo 01.
%s
Outputs a string.
%f
Outputs a floating-point value.
Formatting is supported, for example console.log("Foo %.2f", 1.1) will output the number to 2 decimal places: Foo 1.10.
for (let i = 0; i < 3; i++) {
console.log("Hello, %s. You've called me %d times.", "Eric", i + 1);
}
Hello, Eric. You've called me 1 times.
Hello, Eric. You've called me 2 times.
Hello, Eric. You've called me 3 times.
https://developer.mozilla.org/en-US/docs/Web/API/console#using_string_substitutions
You can use the %c directive to apply a CSS style to console output:

refs
https://exploringjs.com/impatient-js/ch_assertion-api.html
https://exploringjs.com/nodejs-shell-scripting/downloads/nodejs-shell-scripting-book-preview.pdf
©xgqfrms 2012-2021
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/17745986.html
未经授权禁止转载,违者必究!

浙公网安备 33010602011771号