资讯专栏INFORMATION COLUMN

学习node.js 断言的使用

zero / 736人阅读

摘要:如果不想全局使用的话,可以直接使用带的方法。遗留模式的子类,表示断言失败,模块抛出的错误都是的实例。检测参数和参数之间的严格不相等性,使用比较。使用提供的错误消息或默认错误消息抛出。错误值使用嵌套对象需要存在所有属性。

assert模块提供了一组简单的断言测试,分严格模式(strict)和遗留模式(legacy),严格模式下,对比的方式比较严格,比如说,0与"0"比较,会报错,但在遗留模式下是可以通过的。官方推荐使用严格模式, 所以本文基于strict模式下学习。

如何使用严格模式
const assert = require("assert").strict; // 严格模式

assert.equal(0, "0") // error

全局使用strict模式后,assert.equal()assert.strictEqual()的效果是一样的。
如果不想全局使用的话,可以直接使用带strict的方法。

const assert = require("assert") // 遗留模式

assert.equal(0, "0") // success
assert.strictEqual(0, "0") // error
assert.AssertionError

Error的子类,表示断言失败,assert模块抛出的错误都是AssertionError的实例。

类似于下面这个class,实际上的AssertionError是由ES5写的,下面这个只是方便理解传入的参数

interface IOptions {
  message?: string; // 设置错误的信息
  actual?: any; // 设置错误实例上的实际值
  expected?: any; // 设置错误实例上的期望值
  operator?: string; // 设置用于比较的操作或触发错误的断言函数
  stackStartFn(): any; // 生成的堆栈跟踪将移除所有帧直到提供的函数
}


class AssertionError extends Error {
  constructor(options: IOptions) {
    // ...
  }
}
assert(value: any, message?: string | Error)

检测是否为真值,是assert.ok的别名。

assert.ok(value: any, message?: string | Error)

检测value是否为真值。
如果不为真值,抛出属性messagemessage参数值的AssertionError,如果未定义,为默认错误信息。
如果是Error的实例,则抛出Error实例。(以下关于message的使用都一样)

assert.strictEqual(actual: any, expected: any, message?: string | Error)

检测 actual参数和expected参数之间的严格相等性,使用sameValue比较。

assert.deepStrictEqual(actual: any, expected: any, message?: string | Error)

检测actual参数和expected参数之间的深度严格相等性,深度比较意味着子对象的可枚举的自身属性也通过以下规则进行递归计算。

assert.notStrictEqual(actual: any, expected: any, message?: string | Error)

检测 actual参数和expected参数之间的严格不相等性,使用sameValue比较。

assert.notDeepStrictEqual(actual: any, expected: any, message?: string | Error)

检测actual参数和expected参数之间的深度严格不相等性,深度比较意味着子对象的可枚举的自身属性也通过以下规则进行递归计算。

assert.fail(message?: string | Error = "failed")

使用提供的错误消息或默认错误消息抛出 AssertionError。

assert.throws(fn: function, error?: regExp | function | object | Error, message?: string)

检测fn函数抛出的错误是否与预期的错误error一样。

fn为一个会抛出错误的函数

error可以为多种类型,作为与抛出的错误对比的样本。

为regExp时,可以匹配抛出的错误。
assert.throws(() => {
  throw new Error("it is a error")
}, /^Error: it is a error$/);
为function时,可以自定义验证函数
assert.throws(() => {
  throw new Error("it is a error")
}, (err) => {
  if ((err instanceof Error) && /error/.test(err)) {
    return true;
  }
});
为object时,将仅测试验证对象error上的属性。
const err = new TypeError("错误值");
err.code = 404;
err.foo = "bar";
err.info = {
  nested: true,
  baz: "text"
};
err.reg = /abc/i; // 正则表达式只有当验证对象包含相同的正则表达式时才通过。

assert.throws(() => {
  throw err;
}, {
  name: "TypeError",
  message: "错误值"
  info: {
    nested: true,
    baz: "text"
    // 使用嵌套对象需要存在所有属性。
    // 否则验证将失败。
    // 无法对嵌套属性使用正则表达式!
  }
});
为Error时,用instanceof检测是否是该实例。

注意, error 不能是字符串。 如果提供了一个字符串作为第二个参数,则假定 error 被忽略,而字符串将用于 message。

assert.reject(asyncFn: function | promise, error?: regExp | function | object | Error, message?: string)

assert.throws的异步版本。

asyncFn为一个function时

立即执行该函数,如果该函数不返回promise,则返回一个被拒绝(reject)的 Promise。
如果该函数同步抛出一个错误,返回一个带有该错误的被拒绝的 Promise。

asyncFn为一个Promise时

等待Promise执行,检测是否被拒绝。

assert.ifError(value: any)

如果value不为null或者undefined就将value作为错误抛出。
在回调中测试error参数时,这很有用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109169.html

相关文章

  • 单元测试学习总结

    摘要:通过添加一个回调函数通常命名为给方法,就会知道,它应该等这个函数被调用的时候才能完成测试。此外提供了一些钩子函数和。这些钩子函数可以用于设置测试的先决条件或者对测试进行清理。钩子函数会按照它们被定义的顺序运行。 Mocha 的安装和使用 1. 安装 使用npm全局安装: npm install -g mocha 安装Mocha >= v3.0.0,npm的版本应该>=v1.4...

    netScorpion 评论0 收藏0
  • Node Hero】9. Node.js 单元测试

    摘要:基本上,测试金字塔描述你应该编写单元测试集成测试和端到端测试。集成测试要比端到端测试多,单元测试甚至要更多一些。应用程序单元测试编写单元测试,是为了看看给定的模块单元是否工作。 本文转载自:众成翻译译者:网络埋伏纪事链接:http://www.zcfy.cc/article/1754原文:https://blog.risingstack.com/node-hero-node-js-un...

    104828720 评论0 收藏0
  • 自动化测试(未完,后续学习之后会补充更具体)

    摘要:断言断言是什么模块提供了一组简单的断言测试,可用于测试不变量。环境是他们不必设置大量配置的环境,而是开发人员可以编写代码并从测试中获得即时反馈的地方。每当测试时,结果将出现在您的拉取请求中,您的历史记录将在其控制面板中提供。 Node assert (断言) 断言是什么 assert 模块提供了一组简单的断言测试,可用于测试不变量。 存在严格模式(strict)和遗留模式(legacy...

    姘存按 评论0 收藏0
  • 深入Vue3+TypeScript技术栈-coderwhy大神新课 王红元

    摘要:是一个测试框架,在中配合断言库实现单元测试。脚本命名方式为组件名。单元测试默认测试目录下除了之外的所有文件,可在文件中修改。回收,一般在每个测试脚本测试完成后执行回收。等元素事件名称配置项触发和事件,既触发点击事件。 ​​百度网盘​​提取码:u6C4在使用vue-cli创建项目的时候,会提示要不要安装单元测试和e2e测试。...

    番茄西红柿 评论0 收藏2637
  • Rize - 一个可以让你简单、优雅使用 puppeteer Node.js

    摘要:目前已经成为了非常流行的的库,被广泛用于爬虫或测试。然而,的几乎所有的都是异步的,它返回的是一个。而提供了一系列的,使得测试变得简单方便,测试同样没有问题。更多的可以参考的文档链接在下方。 目前 puppeteer 已经成为了非常流行的 Node.js 的库,被广泛用于爬虫或 UI 测试。 我也很欢喜 puppeteer 这个库。然而,puppeteer 的几乎所有的 API 都是异步...

    JeOam 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<