node.js 断言的使用

时间: 2019-03-13阅读: 161标签: 测试

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是否为真值。
如果不为真值,抛出属性message为message参数值的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参数时,这很有用。


vue-cli3 配置开发-测试环境

首先介绍一下本项目的背景,是基于 vue-cli3.1.1 的单页应用,目前测试环境和生产环境都在线上,并且都在同一个域名下,其中生产环境部署在根目录下,测试环境部署在名为 test 的子目录下,根据生产环境和测试环境的不同

使用Fiddler进行Web接口测试

抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark。为什么使用fiddler?原因如下:

web测试流程及注意事项

界面对不懂技术的客户来说那相当关键,慢慢体会就会明白的。Web界面设计中,对各种元素(如按钮、单选框、复选框、列表框、超连接、输入框等等)的设计是非常重要的。

在 Angular 中引入 Jest 进行单元测试

整体测试跑起来的时候难以定位测试出错的定位,怎么办呢,那就让跑整个测试的时候各个文件之间也没有依赖可以单独跑好了,所以就想到了 Jest。实践证明,在 Angular 中, Jest 大法也非常好使。

针对web系统的常用测试方法

针对web系统的常用测试方法如下:页面链接检查、相关性检查、检查按钮的功能是否正确、字符串长度检查、字符类型检查、特殊字符检查

webdriver定位元素

在UI层面的自动化测试开发中,元素的定位与操作是基础。webdriver提供了很多种定位方法,以下总结了6种:万能法:find_element_by_xpath()、id定位:find_element_by_id(\"id\"),id属性是唯一的、class定位

几款Web服务器性能压力测试工具

http_load程序非常小,http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载。webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力。ab是apache自带的一款功能强大的测试工具。安装了apache一般就自带了。

常用的web网站负载/压力/性能测试工具

在网站上线发布之前,我们除了必要的安全、功能测试外,往往还需要进行压力测试。通过模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件。包括:Apache JMeter 、LoadRunner、NeoLoad等

power assert_更智能、优雅的全方位 assert 断言库

在写测试代码时,以往我们需要翻阅文档,学习各种 API 才能明白如何操作断言。而现在我们可以透过 power-assert 的 assert 方法来减轻调试压力。不仅如此,它还提供更加直观,具体的运行效果,帮助 DEBUG。写测试代码,其实可以很容易。

Selenium打开浏览器加载慢的原因

在自动化元素定位操作中经常使用智能等待来加强定位的强壮性,主要就是因为WebDriver没有提供页面加载场景的方法;在使用JavaScript知识的突然心生灵感,可以使用JavaScript来配合验证页面加载,结果发现我真是井底之蛙。

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全