name: lambdatest-mocha-skill
description: >
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 test".
languages:
- JavaScript
- TypeScript
category: unit-testing
license: MIT
metadata:
author: TestMu AI
version: "1.0"
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 |