关于 mocha-skill
介绍使用 Mocha 编写和运行测试的技能指南,包含 Chai 断言、Sinon 模拟、异步测试、常用命令及测试组织实践。
主要功能
- 01Mocha 测试结构与钩子
- 02Chai 断言
- 03Sinon 模拟与沙箱
- 04Promise 和回调测试
- 05运行、监视与筛选命令
适用场景
- 01测试 JavaScript 函数和服务
- 02在测试期间替换依赖
- 03检查异步代码和回调
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lambdatest/ agent-skills --skill mocha-skill安装后在 Claude Code 中输入/mocha-skill确认已加载。
附带文件reference/advanced-patterns.mdreference/playbook.md
详细介绍
Mocha 测试技能
核心模式
使用 Chai 编写基础测试
const { expect } = require('chai');
describe('Calculator', () => {
let calc;
beforeEach(() => { calc = new Calculator(); });
it('should add two numbers', () => {
expect(calc.add(2, 3)).to.equal(5);
});
it('should throw on divide by zero', () => {
expect(() => calc.divide(10, 0)).to.throw('Division by zero');
});
});
Chai 断言
expect(value).to.equal(5);
expect(arr).to.have.lengthOf(3);
expect(obj).to.have.property('name');
expect(str).to.include('hello');
expect(fn).to.throw(Error);
expect(arr).to.deep.equal([1, 2, 3]);
expect(obj).to.deep.include({ name: 'Alice' });
使用 Sinon 进行模拟
const sinon = require('sinon');
describe('UserService', () => {
let sandbox;
beforeEach(() => { sandbox = sinon.createSandbox(); });
afterEach(() => { sandbox.restore(); });
it('fetches user from API', async () => {
const stub = sandbox.stub(api, 'get').resolves({ name: 'Alice' });
const user = await userService.getUser(1);
expect(user.name).to.equal('Alice');
expect(stub.calledOnce).to.be.true;
});
});
异步测试
it('should fetch data', async () => {
const data = await fetchData();
expect(data).to.have.property('id');
});
it('callback style', (done) => {
fetchData((err, data) => {
expect(err).to.be.null;
done();
});
});
反模式
| 不佳做法 | 良好做法 | 原因 |
|---|---|---|
缺少 done() | 使用 async/await | 测试会一直挂起 |
| 不使用沙箱 | sinon.createSandbox() | 存根会泄漏 |
在 describe 中使用箭头函数 | 使用常规函数调用 this.timeout() | 上下文 |
快速参考
| 任务 | 命令 |
|---|---|
| 运行全部测试 | npx mocha |
| 监视 | npx mocha --watch |
| 按名称搜索 | npx mocha --grep "login" |
| 超时 | npx mocha --timeout 10000 |
| 递归运行 | npx mocha --recursive |
设置:npm install mocha chai sinon --save-dev
深入模式 → reference/playbook.md
| § | 章节 | 行数 |
|---|---|---|
| 1 | 生产环境配置 | mocharc、NYC 覆盖率、TypeScript |
| 2 | 使用 Chai + Sinon 进行测试 | 存根、间谍、断言 |
| 3 | 高级 Sinon 模式 | 虚拟计时器、nock HTTP、顺序调用 |
| 4 | 异步模式 | Promise、await、回调、事件 |
| 5 | 钩子与测试组织 | 生命周期、嵌套、grep 标签 |
| 6 | 自定义报告器与插件 | 报告器类、根钩子 |
| 7 | Express/API 测试 | Supertest 集成 |
| 8 | CI/CD 集成 | GitHub Actions、服务 |
| 9 | 调试速查 | 10 个常见问题 |
| 10 | 最佳实践清单 | 13 项 |
评论
支持 Markdown