主要是整理作为学习笔记,方便日后复习
学习前准备
安装 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 的错误