skill
mocha-skill
Generates Mocha tests in JavaScript with Chai assertions and Sinon mocking. Use when user mentions "Mocha", "Chai", "sinon", "describe/it (not Jest)". Triggers on: "Mocha", "Chai", "sinon", "mocha tes
Set up
Skills are installed by placing their folder where your agent loads skills.
The download comes from github.com/lambdatest/agent-skills itself, not from our server, so what you get is exactly what its author published. The ZIP holds the whole collection; take the folder mocha-skill out of it for mocha-skill.
Part of the collection lambdatest/agent-skills.
npx skills add lambdatest/agent-skills --skill mocha-skill
Or by hand: Copy the folder mocha-skill from github.com/lambdatest/agent-skills into ~/.claude/skills/mocha-skill/ (Claude Code) or your agent's skills folder. Check the collection's own README for other agents.
README
synced Oct 14, 2026Generates Mocha tests in JavaScript with Chai assertions and Sinon mocking. Use when user mentions "Mocha", "Chai", "sinon", "describe/it (not Jest)". Triggers on: "Mocha", "Chai", "sinon", "mocha test".
Mocha Testing Skill
Core Patterns
Basic Test with 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 Assertions
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 Mocking
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;
});
});
Async Testing
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();
});
});
Anti-Patterns
| Bad | Good | Why |
|---|---|---|
Missing done() | Use async/await | Hanging tests |
| No sandbox | sinon.createSandbox() | Stubs leak |
Arrow in describe | Regular function for this.timeout() | Context |
Quick Reference
| Task | Command |
|---|---|
| Run all | npx mocha |
| Watch | npx mocha --watch |
| Grep | npx mocha --grep "login" |
| Timeout | npx mocha --timeout 10000 |
| Recursive | npx mocha --recursive |
Setup: npm install mocha chai sinon --save-dev
Deep Patterns → reference/playbook.md
| § | Section | Lines |
|---|---|---|
| 1 | Production Configuration | mocharc, NYC coverage, TypeScript |
| 2 | Testing with Chai + Sinon | Stubs, spies, assertions |
| 3 | Advanced Sinon Patterns | Fake timers, nock HTTP, sequential |
| 4 | Async Patterns | Promise, await, callback, events |
| 5 | Hooks & Test Organization | Lifecycle, nesting, grep tags |
| 6 | Custom Reporters & Plugins | Reporter class, root hooks |
| 7 | Express/API Testing | Supertest integration |
| 8 | CI/CD Integration | GitHub Actions, services |
| 9 | Debugging Quick-Reference | 10 common problems |
| 10 | Best Practices Checklist | 13 items |