|
1 |
| -const { task } = require('hardhat/config'); |
| 1 | +const Mocha = require('mocha'); |
| 2 | +const { types, task, subtask } = require('hardhat/config'); |
| 3 | +const { TASK_TEST_RUN_MOCHA_TESTS } = require('hardhat/builtin-tasks/task-names'); |
2 | 4 | const { gray, yellow } = require('chalk');
|
3 | 5 | const optimizeIfRequired = require('../util/optimizeIfRequired');
|
4 | 6 |
|
| 7 | +// Override builtin "test:run-mocha-tests" subtask so we can use the local mocha |
| 8 | +// installation, which is up to date and allows us to run parallel tests. |
| 9 | +subtask(TASK_TEST_RUN_MOCHA_TESTS).setAction(async ({ testFiles }, { config }) => { |
| 10 | + const mocha = new Mocha(config.mocha); |
| 11 | + testFiles.forEach(file => mocha.addFile(file)); |
| 12 | + |
| 13 | + const testFailures = await new Promise(resolve => { |
| 14 | + mocha.run(resolve); |
| 15 | + }); |
| 16 | + |
| 17 | + return testFailures; |
| 18 | +}); |
| 19 | + |
5 | 20 | task('test')
|
6 | 21 | .addFlag('optimizer', 'Compile with the optimizer')
|
7 | 22 | .addFlag('gas', 'Compile gas usage')
|
8 | 23 | .addFlag('native', 'Compile with the native solc compiler')
|
| 24 | + .addFlag('parallel', 'Run tests in parallel') |
| 25 | + .addOptionalParam('jobs', 'Max number of worker processes for parallel runs', 4, types.int) |
9 | 26 | .addOptionalParam('gasOutputFile', 'Gas reporter output file')
|
10 | 27 | .addOptionalParam('grep', 'Filter tests to only those with given logic')
|
11 | 28 | .setAction(async (taskArguments, hre, runSuper) => {
|
12 |
| - const { gas, grep, native, gasOutputFile } = taskArguments; |
| 29 | + const { gas, grep, native, gasOutputFile, parallel, jobs } = taskArguments; |
13 | 30 |
|
14 | 31 | if (native) {
|
15 | 32 | hre.config.solc.native = true;
|
16 | 33 | }
|
17 | 34 |
|
18 | 35 | optimizeIfRequired({ hre, taskArguments });
|
19 | 36 |
|
| 37 | + if (parallel) { |
| 38 | + console.log(gray(`Running tests in parallel. Jobs count: ${jobs}`)); |
| 39 | + hre.config.mocha.parallel = true; |
| 40 | + hre.config.mocha.jobs = jobs; |
| 41 | + } |
| 42 | + |
20 | 43 | if (grep) {
|
21 | 44 | console.log(gray('Filtering tests to those containing'), yellow(grep));
|
22 | 45 | hre.config.mocha.grep = grep;
|
|
0 commit comments