---
description: Create custom reporters.
title: Third party reporters
---

Mocha allows you to define custom third-party reporters within your own test suite, or by using npm modules. For example if "lcov-reporter" was published to npm, you would simply add it to your package.json in `devDependencies` and use `--reporter lcov-reporter`.

:::note[New in v12.0.0]
In Mocha 12, the extension logic is switched to modern `class`es instead of `util.inherits`.
If you're on Mocha 11 or older, use `mocha.util.inherits`. See [v11.mochajs.org](https://v11.mochajs.org/explainers/third-party-reporters/) for details.
:::

Here is a minimalistic sample reporter for Mocha 12, which you can use by executing: `mocha --reporter my-reporter.js`

```js
// my-reporter.js
import mocha from "mocha";

// You can extend other reporters by changing the class you extend:
// export default class MyReporter extends mocha.reporters.Spec {
export default class MyReporter extends mocha.reporters.Base {
  constructor(runner) {
    super(runner);

    let passes = 0;
    let failures = 0;

    runner.on("pass", function (test) {
      passes++;
      console.log("pass: %s", test.fullTitle());
    });

    runner.on("fail", function (test, err) {
      failures++;
      console.log("fail: %s -- error: %s", test.fullTitle(), err.message);
    });

    runner.on("end", function () {
      console.log("end: %d/%d", passes, passes + failures);
    });
  }
}
```

For details, look at the implementations in [lib/reporters/\*](https://github.com/mochajs/mocha/tree/main/lib/reporters).

[mocha-examples: third-party-reporter (GitHub)](https://github.com/mochajs/mocha-examples/tree/main/packages/third-party-reporter) is another sample implementation.

Mocha provides the following events:

- `start`: Execution started
- `waiting`: Execution of root `Suite` delayed
- `ready`: Execution of root `Suite` started
- `end`: Execution complete
- `suite`: Test suite execution started
- `suite end`: All tests (and sub-suites) have finished
- `test`: Test execution started
- `test end`: Test completed
- `hook`: Hook execution started
- `hook end`: Hook complete
- `pass`: Test passed
- `fail`: Test failed
- `pending`: Test pending
- `retry`: Test failed and retries
