node学习: assert

本文介绍如何使用Node.js的assert模块进行单元测试,包括安装Node.js、创建测试文件、使用assert断言函数结果,以及如何运行测试。同时,介绍了如何使用mocha优化测试体验,实现更复杂的测试场景。
主要是整理作为学习笔记,方便日后复习
复制代码

学习前准备

安装 node
体验assert

创建 test.js 文件

// test.js
const assert = require('assert')

// 待测试代码
function sum(...arr) {
  return arr.reduce((p, n) => p + n)
}

// 测试代码
assert(sum(1, 2) === 3, ' 预期 sum(1, 2) 返回 3')
复制代码

执行 test.js, node test.js

  1. 未报错,则测试通过。
  2. assert.js 错,则测试没有通过

assert模块非常简单,它断言一个表达式为true。如果断言失败,就抛出Error

优化测试体验

在一个 js 中经常会写很多测试代码,如果有一条报错,那么之后的测试将不会执行。有什么办法可以执行一次,就知道哪些测试没有通过呢? mocha, 这里不对 mocha 过多讲解,只给出一个例子

安装 npm install mocha -g

// test.js
const assert = require('assert')

// 待测试代码
function sum(...arr) {
  return arr.reduce((p, n) => p + n)
}

describe('我的第一次测试', () => {
  it('sum(1, 2) should return 3', () => {
    // 测试代码
    assert(sum(1, 2) === 3, ' 预期 sum(1, 2) 返回 3')33')
  })
})
复制代码

执行 mocha ./test.js

API

assert(value[, message])

  • value 为 true 时,测试通过
  • value 为 false 时,测试不通过通过,抛出带有 message 的错误

assert.ok(value[, message])

assert(value[, message])

assert.equal(actual, expected[, message])

  • actual == expected 为 true 时,测试通过
  • actual == expected 为 false 时,测试不通过通过,抛出带有 message 的错误

assert.strictEqual(actual, expected[, message])

  • actual === expected 为 true 时,测试通过
  • actual === expected 为 false 时,测试不通过通过,抛出带有 message 的错误

assert.notStrictEqual(actual, expected[, message])

测试 actual 参数和 expected 参数之间的严格不相等,与 assert.notStrictEqual() 相反

assert.deepStrictEqual(actual, expected[, message])

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

  • 原始值使用全等运算符(===)比较。Set 的值与 Map 的键使用 SameValueZero 比较。
  • 对象的原型也使用全等运算符比较。
  • 对象的类型标签要求相同。
  • 比较[对象包装器][]时,其对象和里面的值要求相同。

如果值不相等,则抛出 AssertionError,并将 message 属性设置为等于 message 参数的值

assert.notDeepStrictEqual(actual, expected[, message])

测试深度严格的不相等。 与 assert.deepStrictEqual() 相反。

assert.throws(fn[, error][, message])

期望 fn 函数抛出错误

  • error <RegExp> | <Function> | <Object> | <Error>

执行顺序如下

  1. 判断 fn 是否抛出错误
  2. 如果抛出错误,错误是否与 error 深度相等
  3. 抛出带有 message 的错误

assert.doesNotThrow(fn[, error][, message])

断言 fn 函数不会抛出错误

  • error <RegExp> | <Function>

如果 fn 抛出错误并且它与 error 参数指定的类型相同,则抛出 AssertionError

assert.ifError(value)

如果 value 不为 undefinednull,则抛出 valu

assert.fail([message])

抛出带有 message 的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值