Join the Hardhat team! We are hiring

#Running tests in parallel

You can run your tests in parallel by using the --parallel flag:

$ npx hardhat test --parallel

Alternatively, use parallel: true in the mocha section of hardhat.config, which will enable parallelism for plugins that don't have a --parallel flag, like solidity-coverage.

Most of the time, running your tests serially or in parallel should produce the same results, but there are some scenarios where tests run in parallel will behave differently:

  • In serial mode all the test files share the same instance of the Hardhat Runtime Environment, but in parallel mode this is not always the case. Mocha uses a pool of workers to execute the tests, and each worker starts with its own instance of the HRE. This means that if one test file deploys a contract, then that deployment will exist in some of the other test files and it won't in others.
  • The .only modifier doesn't work in parallel mode. As an alternative, you can use --grep to run specific tests.
  • Because parallel mode uses more system resources, the duration of individual tests might be longer, so there's a chance that some tests start timing out for that reason. If you run into this problem, you can increase the tests timeout in the Mocha section of your Hardhat config or using this.timeout() in your tests.
  • The order in which tests are executed is non-deterministic.

There are some other limitations related to parallel mode. You can read more about them in Mocha's docs. And if you are running into some issue when using parallel mode, you can check their Troubleshooting parallel mode section.