Mocha 是一个功能丰富的 JavaScript 测试框架,运行在 Node.js 和浏览器中,使异步测试变得简单而有趣。
首先,确保你已经安装了 Node.js,然后通过 npm 安装 Mocha:
npm install --save-dev mocha
创建一个测试文件 test/test.js
:
const assert = require('assert');
// 描述测试套件
describe('Array', function() {
// 描述具体的测试用例
describe('#indexOf()', function() {
it('当值不存在时应该返回 -1', function() {
assert.equal([1, 2, 3].indexOf(4), -1);
});
});
});
在 package.json
中添加测试脚本:
{
"scripts": {
"test": "mocha"
}
}
然后运行:
npm test
Mocha 支持多种断言库:
const assert = require('assert');
describe('assert', function() {
it('应该使用严格相等', function() {
assert.strictEqual(1, 1);
});
});
安装 Chai:
npm install --save-dev chai
使用示例:
const expect = require('chai').expect;
describe('chai expect', function() {
it('应该支持链式断言', function() {
expect([1, 2, 3]).to.have.lengthOf(3).and.to.include(2);
});
});
Mocha 处理异步代码非常简单:
describe('异步测试', function() {
// 使用 done 回调
it('应该在 500ms 后完成', function(done) {
setTimeout(function() {
assert.ok(true);
done();
}, 500);
});
// 或者返回 Promise
it('应该使用 Promise', function() {
return new Promise(function(resolve) {
assert.ok(true);
resolve();
});
});
// 或者使用 async/await
it('应该使用 async/await', async function() {
const result = await someAsyncFunction();
assert.equal(result, 'expected');
});
});
Mocha 提供了测试生命周期钩子:
describe('钩子示例', function() {
before(function() {
// 在所有测试之前运行
});
after(function() {
// 在所有测试之后运行
});
beforeEach(function() {
// 在每个测试之前运行
});
afterEach(function() {
// 在每个测试之后运行
});
// 测试用例...
});
Mocha 支持多种报告格式,例如:
# 点矩阵报告
mocha --reporter dot
# 文档风格报告
mocha --reporter doc
# 生成 HTML 报告
mocha --reporter mochawesome
Mocha 也可以在浏览器中运行:
<!DOCTYPE html>
<html>
<head>
<title>Mocha Tests</title>
<link rel="stylesheet" href="https://unpkg.com/mocha/mocha.css">
</head>
<body>
<div id="mocha"></div>
<script src="https://unpkg.com/mocha/mocha.js"></script>
<script>mocha.setup('bdd')</script>
<script src="test.js"></script>
<script>
mocha.run();
</script>
</body>
</html>
describe('跳过测试', function() {
it.skip('这个测试会被跳过', function() {
// 这个不会运行
});
});
describe('只运行这个', function() {
it.only('只有这个测试会运行', function() {
// 只有这个会运行
});
it('这个不会运行', function() {
// 不会运行
});
});
describe('超时设置', function() {
// 设置单个测试超时时间
it('应该快速完成', function(done) {
this.timeout(100); // 100ms
setTimeout(done, 50);
});
});
// 或者设置整个套件的超时时间
describe('长测试套件', function() {
this.timeout(5000); // 5秒
it('需要较长时间', function(done) {
setTimeout(done, 3000);
});
});
Mocha 是一个灵活且功能丰富的测试框架,可以满足从简单到复杂的各种 JavaScript 测试需求。