lambdatest/agent-skills

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 test".

First seen Mar 5, 2026

Installation

$ npx skills add lambdatest/agent-skills --skill mocha-skill

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from lambdatest/agent-skills · top by installs.

npx skills add lambdatest/agent-skills

Browse all from lambdatest/agent-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 366
License LICENSE
Default branch main
Open issues 3
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

Version1.0
LicenseMIT
More metadata
author
TestMu AI
version
1.0

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 3,049 B
  • docs SUMMARY.md 222 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 198 installs

SKILL.md

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