Command-Line Usage
Running npx mocha --help
will show the full list of available commands:
Rules & Behavior
--allow-uncaught
By default, Mocha will attempt to trap uncaught exceptions thrown from running tests and report these as test failures.
Use --allow-uncaught
to disable this behavior and allow uncaught exceptions to propagate.
Will typically cause the process to crash.
This flag is useful when debugging particularly difficult-to-track exceptions.
--async-only, -A
Enforce a rule that tests must be written in “async” style, meaning each test provides a done
callback or returns a Promise
.
Non-compliant tests will be marked as failures.
--bail, -b
Causes Mocha to stop running tests after the first test failure it encounters. Corresponding “after each” and “after all” hooks are executed for potential cleanup.
--bail
does not imply --exit
.
--check-leaks
Use this option to have Mocha check for global variables that are leaked while running tests.
Specify globals that are acceptable via the --global
option (for example: --check-leaks --global jQuery --global MyLib
).
--compilers
--delay
Delay initial execution of root suite.
See Delayed Root Suite.
--dry-run
Report tests without executing any of them, neither tests nor hooks.
--exit
Prior to version v4.0.0, by default, Mocha would force its own process to exit once it was finished executing all tests. This behavior enables a set of potential problems; it’s indicative of tests (or fixtures, harnesses, code under test, etc.) which don’t clean up after themselves properly. Ultimately, “dirty” tests can (but not always) lead to false positive or false negative results.
“Hanging” most often manifests itself if a server is still listening on a port, or a socket is still open, etc.
It can also be something like a runaway setInterval()
, or even an errant Promise
that never fulfilled.
The default behavior in v4.0.0 (and newer) is --no-exit
, where previously it was --exit
.
The easiest way to “fix” the issue is to pass --exit
to the Mocha process.
It can be time-consuming to debug — because it’s not always obvious where the problem is — but it is recommended to do so.
To ensure your tests aren’t leaving messes around, here are some ideas to get started:
- See the Node.js guide to debugging
- Use the new
async_hooks
API (example) - Try something like wtfnode
- Use
.only
until you find the test that causes Mocha to hang
--pass-on-failing-test-suite
If set to true
, Mocha returns exit code 0
even if there are failed tests during the run.
--fail-zero
Fail test run if no tests are encountered with exit-code: 1
.
--forbid-only
Enforce a rule that tests may not be exclusive (use of e.g., describe.only()
or it.only()
is disallowed).
--forbid-only
causes Mocha to fail when an exclusive (“only’d”) test or suite is encountered, and it will abort further test execution.
--forbid-pending
Enforce a rule that tests may not be skipped (use of e.g., describe.skip()
, it.skip()
, or this.skip()
anywhere is disallowed).
--forbid-pending
causes Mocha to fail when a skipped (“pending”) test or suite is encountered, and it will abort further test execution.
--global <variable-name>
Define a global variable name.
For example, suppose your app deliberately exposes a global named app
and YUI
, you may want to add --global app --global YUI
.
--global
accepts wildcards.
You could do --global '*bar'
and it would match foobar
, barbar
, etc.
You can also pass in '*'
to ignore all globals.
--global
can accept a comma-delimited list; --global app,YUI
is equivalent to --global app --global YUI
.
By using this option in conjunction with --check-leaks
, you can specify an allowlist of known global variables that you expect to leak into global scope.
--jobs <count>, -j <count>
Use --jobs <count>
to specify the maximum number of processes in the worker pool.
The default value is the number of CPU cores less 1.
Has no effect unless used with --parallel
.
--parallel, -p
Use the --parallel
flag to run tests in a worker pool.
Each test file will be put into a queue and executed as workers become available.
--retries <n>
Retries failed tests n
times.
Mocha does not retry test failures by default.
--slow <ms>, -s <ms>
Specify the “slow” test threshold in milliseconds. Mocha uses this to highlight test cases that are taking too long. “Slow” tests are not considered failures.
--timeout <ms>, -t <ms>
Specifies the test case timeout, defaulting to two (2) seconds (2000 milliseconds). Tests taking longer than this amount of time will be marked as failed.
To override you may pass the timeout in milliseconds, or a value with the s
suffix, e.g., --timeout 2s
and --timeout 2000
are equivalent.
To disable timeouts, use --timeout 0
.
--ui <name>, -u <name>
The --ui
option lets you specify the interface to use, defaulting to bdd
.
Reporting & Output
--color, -c, --colors
“Force” color output to be enabled, or alternatively force it to be disabled via --no-color
.
By default, Mocha uses the supports-color module to decide.
In some cases, color output will be explicitly suppressed by certain reporters outputting in a machine-readable format.
--diff
When possible, show the difference between expected and actual values when an assertion failure is encountered.
This flag is unusual in that it defaults to true
; use --no-diff
to suppress Mocha’s own diff output.
Some assertion libraries will supply their own diffs, in which case Mocha’s will not be used, regardless of the default value.
Mocha’s own diff output does not conform to any known standards, and is designed to be human-readable.
By default strings are truncated to 8192 characters before generating a diff. This is to prevent performance problems with large strings.
It can however make the output harder to interpret when comparing large strings.
Therefore it is possible to configure this value using --reporter-option maxDiffSize=[number]
.
A value of 0 indicates no limit, default is 8192 characters.
--full-trace
Enable “full” stack traces. By default, Mocha attempts to distill stack traces into less noisy (though still useful) output.
This flag is helpful when debugging a suspected issue within Mocha or Node.js itself.
--inline-diffs
Enable “inline” diffs, an alternative output for diffing strings.
Useful when working with large strings.
Does nothing if an assertion library supplies its own diff output.
--reporter <name>, -R <name>
Specify the reporter that will be used, defaulting to spec
.
Allows use of third-party reporters.
For example, mocha-lcov-reporter may be used with --reporter mocha-lcov-reporter
after it has been installed.
--reporter-option <option>, -O <option>, --reporter-options <option>
Provide options specific to a reporter in <key>=<value>
format, e.g., --reporter tap --reporter-option tapVersion=13
.
Not all reporters accept options.
Can be specified as a comma-delimited list.
Configuration
--config <path>
Specify an explicit path to a configuration file.
By default, Mocha will search for a config file if --config
is not specified; use --no-config
to suppress this behavior.
--node-option <name>, -n <name>
For Node.js and V8 options. Mocha forwards these options to Node.js by spawning a new child-process.
The options are set without leading dashes --
, e.g. -n require=foo -n unhandled-rejections=strict
Can also be specified as a comma-delimited list: -n require=foo,unhandled-rejections=strict
--opts <path>
--package <path>
Specify an explicit path to a package.json
file (ostensibly containing configuration in a mocha
property).
By default, Mocha looks for a package.json
in the current working directory or nearest ancestor, and will use the first file found (regardless of whether it contains a mocha
property); to suppress package.json
lookup, use --no-package
.
File Handling
--extension <ext>
Files having this extension will be considered test files.
Defaults to js
.
Specifying --extension
will remove .js
as a test file extension; use --extension js
to re-add it.
For example, to load .mjs
and .js
test files, you must supply --extension mjs --extension js
.
The option can be given multiple times.
The option accepts a comma-delimited list: --extension a,b
is equivalent to --extension a --extension b
.
--extension
now supports multipart extensions (e.g., spec.js
), leading dots (.js
) and combinations thereof (.spec.js
);
--file <file>
Explicitly include a test file to be loaded before other test files.
Multiple uses of --file
are allowed, and will be loaded in order given.
Useful if you want to declare, for example, hooks to be run before every test across all other test files.
Files specified this way are not affected by --sort
or --recursive
.
Files specified in this way should contain one or more suites, tests or hooks.
If this is not the case, consider --require
instead.
--ignore <file|directory|glob>, --exclude <file|directory|glob>,
Explicitly ignore one or more test files, directories or globs (e.g., some/**/files*
) that would otherwise be loaded.
Can be specified multiple times.
Files specified using --file
are not affected by this option.
--recursive
When looking for test files, recurse into subdirectories.
See --extension
for defining which files are considered test files.
--require <module>, -r <module>
Require a module before loading the user interface or test files. This is useful for:
- Test harnesses
- Assertion libraries that augment built-ins or global scope (such as should.js)
- Compilers such as Babel via @babel/register or TypeScript via ts-node (using
--require ts-node/register
). See Babel or TypeScript working examples.
Modules required in this manner are expected to do work synchronously; Mocha won’t wait for async tasks in a required module to finish.
--sort, -S
Sort test files (by absolute path) using Array.prototype.sort.
--watch, -w
Rerun tests on file changes.
The --watch-files
and --watch-ignore
options can be used to control which files are watched for changes.
Tests may be rerun manually by typing ⓡ ⓢ ⏎ (same shortcut as nodemon
).
--watch-files <file|directory|glob>
List of paths or globs to watch when --watch
is set.
If a file matching the given glob changes or is added or removed mocha will rerun all tests.
If the path is a directory all files and subdirectories will be watched.
By default all files in the current directory having one of the extensions provided by --extension
and not contained in the node_modules
or .git
folders are watched.
The option can be given multiple times.
The option accepts a comma-delimited list: --watch-files a,b
is equivalent to --watch-files a --watch-files b
.
--watch-ignore <file|directory|glob>
List of paths or globs to exclude from watching.
Defaults to node_modules
and .git
.
To exclude all files in a directory it is preferable to use foo/bar
instead of foo/bar/**/*
.
The latter will still watch the directory foo/bar
but will ignore all changes to the content of that directory.
The option can be given multiple times.
The option accepts a comma-delimited list: --watch-ignore a,b
is equivalent to --watch-ignore a --watch-ignore b
.
Test Filters
--fgrep <string>, -f <string>
Cause Mocha to only run tests having titles containing the given string
.
Mutually exclusive with --grep
.
--grep <regexp>, -g <regexp>
Cause Mocha to only run tests matching the given regexp
, which is internally compiled to a RegExp.
Suppose, for example, you have “api” related tests, as well as “app” related tests, as shown in the following snippet; One could use --grep api
or --grep app
to run one or the other.
The same goes for any other part of a suite or test-case title, --grep users
would be valid as well, or even --grep GET
.
And another option with double quotes: --grep "groupA|groupB"
.
And for more complex criteria: --grep "/get/i"
.
Some shells as e.g. Git-Bash-for-Windows may require: --grep "'/get/i'"
.
Using flags other than the ignoreCase /i
(especially /g
and /y
) may lead to unpredictable results.
Mutually exclusive with --fgrep
.
--invert
Use the inverse of the match specified by --grep
or fgrep
.
Requires either --grep
or --fgrep
(but not both).
Other Options
--inspect, --inspect-brk, inspect
Enables Node.js’ inspector.
Use --inspect
/ --inspect-brk
to launch the V8 inspector for use with Chrome Dev Tools.
Use inspect
to launch Node.js’ internal debugger.
All of these options are mutually exclusive.
Implies --timeout 0
.
About Option Types
Each flag annotated of type [boolean]
in Mocha’s --help
output can be negated by prepending --no-
to the flag name.
For example, --no-color
will disable Mocha’s color output, which is enabled by default.
Unless otherwise noted, all boolean flags default to false
.
About node
Flags
The mocha
executable supports all applicable flags which the node
executable supports.
These flags vary depending on your version of Node.js.
node
flags can be defined in Mocha’s configuration.
--enable-source-maps
If the --enable-source-maps
flag
is passed to Mocha, source maps will be collected and used to provide accurate stack traces for transpiled code:
About V8 Flags
Prepend --v8-
to any flag listed in the output of node --v8-options
(excluding --v8-options
itself) to use it.
V8 flags can be defined in Mocha’s configuration.