在前端开发中,我们经常需要对代码进行测试来确保其正确性。其中,断言(assert)是一种常用的测试方式。npm 上有很多开源的断言库,本文将介绍其中一款 —— justo.assert。
简介
justo.assert 是一款轻量级的,灵活的 Node.js 断言库。它可以被用作 Node.js 或浏览器端的断言库。
同时,它也支持插件机制,你可以通过插件来增强函数库的能力。
安装使用
使用 npm 安装:
npm install justo.assert --save-dev
安装后,你可以在项目中引入并使用它:
const assert = require("justo.assert"); assert(1+1 === 2, "1 + 1 应该等于 2");
你也可以为你的测试编写一个运行器,来简化测试过程:
-- -------------------- ---- ------- ----- ------ - ------------------------ -------- -------------- --- - ------------------ ----- - -------- -------- --- - --- - ----- ------------- - ---------- - ----- --- - ------------- - -------- --------------- - - ---------------- -- -- - ----- - - ---- --- -- -- - ---------- --- -- -- - - ---- ---- --- ----- - - ---- --- -- -- - ---------- --- -- -- - - ---- ---- --- ---
运行你的测试:
> node test.js 测试加法 ✓ 1 + 1 应该等于 2 ✓ 2 + 2 应该等于 4
断言 API
justo.assert 提供了以下断言 API:
assert(value, [msg])
- value (Any): 待测试的值。
- msg (String): 断言失败时提示的信息。
若 value
为假,则抛出错误,提示信息为 msg
(默认为 "Assertion failed.")。
assert(1 + 1 === 2);
assert.not(value, [msg])
- value (Any): 待测试的值。
- msg (String): 断言失败时提示的信息。
若 value
为真,则抛出错误,提示信息为 msg
(默认为 "Assertion failed.")。
assert.not(1 + 1 === 3);
assert.equal(actual, expected, [msg])
- actual (Any): 实际的值。
- expected (Any): 期望的值。
- msg (String): 断言失败时提示的信息。
若 actual
不等于 expected
,则抛出错误,提示信息为 msg
(默认为 actual + " !== " + expected.
)。
assert.equal(1 + 1, 2);
assert.notEqual(actual, expected, [msg])
- actual (Any): 实际的值。
- expected (Any): 期望的值。
- msg (String): 断言失败时提示的信息。
若 actual
等于 expected
,则抛出错误,提示信息为 msg
(默认为 actual + " === " + expected.
)。
assert.notEqual(1 + 1, 3);
assert.strictEqual(actual, expected, [msg])
- actual (Any): 实际的值。
- expected (Any): 期望的值。
- msg (String): 断言失败时提示的信息。
若 actual
不恒等于 expected
,则抛出错误,提示信息为 msg
(默认为 actual + " !== " + expected.
)。
assert.strictEqual(1 + 1, 2);
assert.notStrictEqual(actual, expected, [msg])
- actual (Any): 实际的值。
- expected (Any): 期望的值。
- msg (String): 断言失败时提示的信息。
若 actual
恒等于 expected
,则抛出错误,提示信息为 msg
(默认为 actual + " === " + expected.
)。
assert.notStrictEqual(1 + 1, 3);
assert.same(actual, expected, [msg])
- actual (Any): 实际的值。
- expected (Any): 期望的值。
- msg (String): 断言失败时提示的信息。
若 actual
不和 expected
指向相同的对象,则抛出错误,提示信息为 msg
(默认为 actual + " !== " + expected.
)。
let obj = {}; let sameObj = obj; assert.same(obj, sameObj);
assert.notSame(actual, expected, [msg])
- actual (Any): 实际的值。
- expected (Any): 期望的值。
- msg (String): 断言失败时提示的信息。
若 actual
和 expected
指向相同的对象,则抛出错误,提示信息为 msg
(默认为 actual + " === " + expected.
)。
let obj = {}; let anotherObj = {}; assert.notSame(obj, anotherObj);
assert.instance(value, constructor, [msg])
- value (Any): 待测试的值。
- constructor (Function): 期望的构造函数。
- msg (String): 断言失败时提示的信息。
若 value
不是 constructor
的实例,则抛出错误,提示信息为 msg
(默认为 value + " is not an instance of " + constructor.name + ".")。
assert.instance(new Date(), Date);
assert.notInstance(value, constructor, [msg])
- value (Any): 待测试的值。
- constructor (Function): 期望的构造函数。
- msg (String): 断言失败时提示的信息。
若 value
是 constructor
的实例,则抛出错误,提示信息为 msg
(默认为 value + " is an instance of " + constructor.name + ".")。
assert.notInstance({}, Date);
assert.nil(value, [msg])
- value (Any): 待测试的值。
- msg (String): 断言失败时提示的信息。
若 value
不为 null 或 undefined,则抛出错误,提示信息为 msg
(默认为 value + " is not nil.")。
assert.nil(undefined);
assert.notNull(value, [msg])
- value (Any): 待测试的值。
- msg (String): 断言失败时提示的信息。
若 value
为 null 或 undefined,则抛出错误,提示信息为 msg
(默认为 value + " is nil.")。
assert.notNull(0);
assert.ok(value, [msg])
- value (Any): 待测试的值。
- msg (String): 断言失败时提示的信息。
若 value
不为真,则抛出错误,提示信息为 msg
(默认为 "Assertion failed.")。
assert.ok(1 + 1 === 2);
assert.fail([msg])
- msg (String): 断言失败时提示的信息。
始终抛出错误,提示信息为 msg
(默认为 "Assertion failed.")。
assert.fail("1 + 1 不等于 3");
拓展
同时,justo.assert 支持拓展,下面将讲解如何拓展该库。
justo.assert 的拓展是通过插件来实现的。一个插件需要导出一个函数,在该函数中将断言 API 作为入参传入,然后对 API 做出任意的调整。例如,你可以为断言库增加自定义的断言 API。
以下是一个示例插件,它添加了一个 assert.greaterThan
方法。
定义 plugin.js:
-- -------------------- ---- ------- -------------- - ---------------- - ------------------ - ---------------- --------- ---- - ----------------- -- ---------------- -- ------ - --------- - ------- - ----- --- --------- -- ------ - - -- --- ------- ---- - - -------- - ----- -- --
使用插件:
const assert = require("justo.assert"); const plugin = require("./plugin"); plugin(assert); assert.greaterThan(2, 1);
注意,该插件只是示例,实际情况中需要自行根据自己项目需要编写插件。
总结
本文介绍了 justo.assert 的使用和拓展。该断言库提供了丰富的 API,并且支持插件,可以为开发者带来更好的使用体验。希望通过本文的介绍,对读者们有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5f19331b403f2923b035c44e