主要是整理作为学习笔记,方便日后复习
复制代码
学习前准备
安装 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
- 未报错,则测试通过。
- 报
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>
执行顺序如下
- 判断
fn
是否抛出错误 - 如果抛出错误,错误是否与
error
深度相等 - 抛出带有
message
的错误
assert.doesNotThrow(fn[, error][, message])
断言 fn
函数不会抛出错误
- error <RegExp> | <Function>
如果 fn
抛出错误并且它与 error
参数指定的类型相同,则抛出 AssertionError
assert.ifError(value)
如果 value
不为 undefined
或 null
,则抛出 valu
assert.fail([message])
抛出带有 message
的错误