ESLint rules for mocha.
This plugin requires ESLint 4.0.0 or later.
npm install --save-dev eslint-plugin-mocha
.eslintrc.jsonThen add a reference to this plugin and selected rules in your eslint config:
{ "plugins": [ "mocha" ] }
eslint.config.js (requires eslint >= 8.23.0)To use this plugin with the new eslint configuration format (flat config):
import mochaPlugin from 'eslint-plugin-mocha'; export default [ mochaPlugin.configs.flat.recommended // or `mochaPlugin.configs.flat.all` to enable all // ... Your configurations here ];
This plugin supports the following settings, which are used by multiple rules:
additionalCustomNames: This allows rules to check additional function names when looking for suites or test cases. This might be used with a custom Mocha extension, such as ember-mocha or mocha-each.
Example:
{ "rules": { "mocha/no-skipped-tests": "error", "mocha/no-exclusive-tests": "error" }, "settings": { "mocha/additionalCustomNames": [ { "name": "describeModule", "type": "suite", "interfaces": [ "BDD" ] }, { "name": "testModule", "type": "testCase", "interfaces": [ "TDD" ] } ] } }
The name property can be in any of the following forms:
A plain name e.g. describeModule, which allows:
describeModule("example", function() { ... });
A dotted name, e.g. describe.modifier, which allows:
describe.modifier("example", function() { ... });
A name with parentheses, e.g. forEach().describe, which allows:
forEach([ 1, 2, 3 ]) .describe("example", function(n) { ... });
Any combination of the above, e.g. forEach().describeModule.modifier, which allows:
forEach([ 1, 2, 3 ]) .describeModule.modifier("example", function(n) { ... });
recommendedThis plugin exports a recommended config that enforces good practices.
Enable it with the extends option:
{ "extends": [ "plugin:mocha/recommended" ] }
allThere's also a configuration that enables all of our rules.
See Configuring Eslint on eslint.org for more info.
💼 Configurations enabled in.
⚠️ Configurations set to warn in.
🚫 Configurations disabled in.
✅ Set in the recommended configuration.
🔧 Automatically fixable by the --fix CLI option.
| Name | Description | 💼 | ⚠️ | 🚫 | 🔧 |
|---|---|---|---|---|---|
| consistent-spacing-between-blocks | Require consistent spacing between blocks | ✅ | 🔧 | ||
| handle-done-callback | Enforces handling of callbacks for async tests | ✅ | |||
| max-top-level-suites | Enforce the number of top-level suites in a single file | ✅ | |||
| no-async-describe | Disallow async functions passed to describe | ✅ | 🔧 | ||
| no-empty-description | Disallow empty test descriptions | ✅ | |||
| no-exclusive-tests | Disallow exclusive tests | ✅ | |||
| no-exports | Disallow exports from test files | ✅ | |||
| no-global-tests | Disallow global tests | ✅ | |||
| no-hooks | Disallow hooks | ✅ | |||
| no-hooks-for-single-case | Disallow hooks for a single test or test suite | ✅ | |||
| no-identical-title | Disallow identical titles | ✅ | |||
| no-mocha-arrows | Disallow arrow functions as arguments to mocha functions | ✅ | 🔧 | ||
| no-nested-tests | Disallow tests to be nested within other tests | ✅ | |||
| no-pending-tests | Disallow pending tests | ✅ | |||
| no-return-and-callback | Disallow returning in a test or hook function that uses a callback | ✅ | |||
| no-return-from-async | Disallow returning from an async test or hook | ✅ | |||
| no-setup-in-describe | Disallow setup in describe blocks | ✅ | |||
| no-sibling-hooks | Disallow duplicate uses of a hook at the same level inside a describe | ✅ | |||
| no-skipped-tests | Disallow skipped tests | ✅ | |||
| no-synchronous-tests | Disallow synchronous tests | ✅ | |||
| no-top-level-hooks | Disallow top-level hooks | ✅ | |||
| prefer-arrow-callback | Require using arrow functions for callbacks | ✅ | 🔧 | ||
| valid-suite-description | Require suite descriptions to match a pre-configured regular expression | ✅ | |||
| valid-test-description | Require test descriptions to match a pre-configured regular expression | ✅ |