mocha 是支持浏览器和 node.js 的 javascript 测试框架,需搭配 chai 等断言库使用;通过 describe/it 组织测试,支持钩子、异步、跳过/仅运行、超时控制,推荐本地安装并配置 npm test 脚本。

Mocha 是一个灵活、功能丰富的 JavaScript 测试框架,支持浏览器和 Node.js 环境,适合编写清晰、可维护的单元测试。它本身不提供断言库,通常搭配 Chai(或其他如 assert)使用,也常与 sinon 配合做模拟(mock/stub)。
安装与基础配置
在 Node.js 项目中,推荐本地安装以避免版本冲突:
- 运行 npm install --save-dev mocha chai 安装 Mocha 和 Chai
- 在 package.json 的
scripts中添加:"test": "mocha test/**/*.spec.js"(或.test.js) - 确保测试文件放在
test/目录下,命名含.spec.js或.test.js
编写第一个测试用例
假设你有一个简单的加法函数 add(a, b),存于 src/math.js:
exports.add = (a, b) => a + b;
对应测试文件 test/math.spec.js:
const { expect } = require('chai');
const { add } = require('../src/math');
describe('math module', () => {
it('should return 5 when adding 2 and 3', () => {
expect(add(2, 3)).to.equal(5);
});
it('should handle negative numbers', () => {
expect(add(-1, 1)).to.equal(0);
});
});
describe 组织测试套件,it(或 test)定义单个测试用例;Chai 提供 expect().to.equal() 等链式断言语法。
常用测试结构与技巧
-
钩子函数:用
before()、beforeEach()、afterEach()、after()管理测试前/后逻辑,比如初始化数据、清理 mock -
异步测试:Mocha 原生支持 Promise 或回调。返回 Promise 即可自动等待:
it('fetches user data', async () => { const res = await fetchUser(); expect(res.name).to.exist; }); -
跳过或仅运行某测试:用
it.skip(...)跳过,或it.only(...)只运行该条(调试时很实用) -
超时控制:对慢操作可设
this.timeout(5000)(单位毫秒),放在测试函数内或钩子中
运行与调试建议
- 执行
npm test运行全部测试;加--watch参数(如npx mocha --watch test/)可监听文件变化自动重跑 - 用
--reporter spec(默认)、--reporter dot或第三方报告器(如mochawesome)提升输出可读性 - 配合 VS Code 插件(如 “Mocha Sidebar”)可图形化查看、点击运行单个测试
- 若测试报错但堆栈不清晰,可在
mocha启动时加--full-trace查看完整调用链
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











