Chai 是一个灵活、可读性强的 JavaScript 断言库,支持 expect、assert、should 三种语法,其中 expect 最常用;需配合 Mocha 等测试运行器使用,安装后通过 require 或 import 引入,支持链式断言、深比较、异常捕获及自定义错误消息。

Chai 是一个灵活、可读性强的 JavaScript 断言库,常与 Mocha、Jest 或 Vitest 等测试框架配合使用。它不强制某种断言风格,支持 expect、assert 和 should 三种语法,其中 expect 最常用,语义清晰、链式调用自然。
安装与基本配置
在 Node.js 项目中,通过 npm 安装 Chai:
npm install chai --save-dev
若搭配 Mocha 使用(最常见组合),还需安装:npm install mocha --save-dev
在测试文件顶部引入:const { expect } = require('chai');
或使用 ES 模块写法(需 package.json 中设置 "type": "module"):import { expect } from 'chai';
常用 expect 断言写法
expect 风格以“主谓宾”结构组织,可读性高,支持链式断言和自定义消息:
-
基础相等判断:
expect(2 + 2).to.equal(4);(严格相等===)expect('hello').to.deep.equal(['h','e','l','l','o']);(深比较对象/数组) -
真假值检查:
expect(true).to.be.true;、expect(null).to.be.null;、expect([]).to.be.an('array'); -
包含关系:
expect([1,2,3]).to.include(2);、expect('abc').to.contain('b'); -
异常断言:
expect(() => fn()).to.throw(/invalid/);(匹配错误消息正则)或.to.throw(TypeError) -
自定义失败消息:
expect(sum(1, 2)).to.equal(3, '加法计算结果应为 3');
搭配 Mocha 编写完整测试示例
假设有一个简单函数 add(a, b),测试文件 add.test.js 可这样写:
const { expect } = require('chai');<br>
function add(a, b) { return a + b; }<br><br>
describe('add function', () => {<br>
it('should return correct sum of two numbers', () => {<br>
expect(add(2, 3)).to.equal(5);<br>
expect(add(-1, 1)).to.equal(0);<br>
});<br><br>
it('should throw error when non-number is passed', () => {<br>
expect(() => add('a', 1)).to.throw(TypeError);<br>
});<br>
});
运行命令:npx mocha add.test.js
注意事项与实用技巧
- Chai 本身不运行测试,必须配合测试运行器(如 Mocha、Vitest);Jest 内置断言,一般无需额外引入 Chai
-
should风格需先调用chai.should();,会污染全局 Object.prototype,新手建议优先用expect - 避免过度链式断言导致报错定位困难,例如
expect(obj).to.have.property('x').that.is.a('number').and.is.above(0)—— 任一环节失败都难快速定位 - 异步测试中,确保返回 Promise 或使用
done()回调,Chai 对 Promise 的eventually插件已不再推荐,现代方案建议用async/await+expect(Promise).to.eventually...(需启用chai-as-promised插件)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











