Agent-skills mocha-skill
install
source · Clone the upstream repo
git clone https://github.com/LambdaTest/agent-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/LambdaTest/agent-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/mocha-skill" ~/.claude/skills/lambdatest-agent-skills-mocha-skill && rm -rf "$T"
manifest:
mocha-skill/SKILL.mdsource content
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 | Use async/await | Hanging tests |
| No sandbox | | Stubs leak |
Arrow in | Regular function for | Context |
Quick Reference
| Task | Command |
|---|---|
| Run all | |
| Watch | |
| Grep | |
| Timeout | |
| Recursive | |
Setup: npm install mocha chai sinon --save-dev
npm install mocha chai sinon --save-devDeep Patterns → reference/playbook.md
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 |