断言库用于验证实际结果是否符合预期,主流框架如jest、vitest内置expect接口,支持严格相等(.tobe)、深比较(.toequal)、真值检查及异步验证;vitest扩展了类型检查和内联快照;chai需手动集成,提供expect/should/assert三种风格,但不原生支持异步。

JavaScript 单元测试中,断言库的作用是检查实际结果是否符合预期,从而判断测试用例是否通过。主流测试框架(如 Jest、Vitest、Mocha)都内置或兼容成熟的断言库,使用时核心是调用断言方法并传入期望值与实际值。
用 Jest 的 expect 断言最常见
Jest 自带 expect() 断言接口,语法直观,链式调用丰富:
-
基础相等判断:用
.toBe()检查严格相等(===),适合原始值;用.toEqual()深比较对象或数组 -
真值/假值检查:用
.toBeTruthy()、.toBeFalsy()、.toBeDefined()、.toBeNull()等语义化方法 -
异步操作验证:配合
async/await,用.resolves.toBe()或.rejects.toThrow()检查 Promise 行为
示例:
test('加法函数返回正确结果', () => {expect(add(2, 3)).toBe(5);
expect(fetchUser()).resolves.toHaveProperty('name');
});
Vitest 也用 expect,但支持更灵活的 API
Vitest 默认兼容 Jest 的 expect,同时扩展了如 .toBeTypeOf()、.toMatchInlineSnapshot() 等实用方法。它还支持自定义匹配器,并能无缝集成 TypeScript 类型推导,让断言提示更精准。
- 类型检查更友好:比如
expect(val).toBeTypeOf('string')会自动校验运行时类型 - 快照测试更轻量:用
.toMatchInlineSnapshot()把快照内联在测试文件中,便于追踪变更
纯断言库(如 Chai)需手动搭配测试运行器
如果不用 Jest/Vitest,而是选 Mocha + Chai 组合,需显式引入 Chai 并选择断言风格:
-
Expect 风格:
const { expect } = require('chai');,写法类似 Jest:expect(sum).to.equal(10) -
Should 风格:需启用
should()方法,对象上直接链式调用:sum.should.equal(10) -
Assert 风格:最接近传统写法,如
assert.strictEqual(sum, 10)
注意:Chai 不处理异步,Promise 需配合 async/await 和 return 或 done() 回调。
关键提醒:断言失败要可读、可定位
好的断言不只是“对/错”,还要让人一眼看懂哪里出了问题:
- 避免在断言前做复杂计算,把逻辑拆到变量中,方便调试时查看中间值
- 对对象比较优先用
.toEqual()而非.toBe(),否则容易因引用不同而误报失败 - 自定义错误消息可提升可读性(Jest 支持
expect(...).toBe(...).withContext('用户登录后应返回 token'))
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











