diff --git a/src/main/mocha.ts b/src/main/mocha.ts index 1bd4564..049574b 100644 --- a/src/main/mocha.ts +++ b/src/main/mocha.ts @@ -50,6 +50,7 @@ export default class MochaWrapper extends Mocha { setMaxParallel(maxParallel: number) { this.maxParallel = maxParallel; + return this; } enableExitMode() { diff --git a/test/delay/reporter.js b/test/delay/reporter.js deleted file mode 100644 index 59ed300..0000000 --- a/test/delay/reporter.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -const Base = require('mocha').reporters.Base; - -class Reporter extends Base { - constructor(runner) { - super(runner); - - [ - 'waiting', - 'start', - 'end', - 'suite', - 'suite end', - 'test', - 'test end', - 'pass', - 'fail', - 'pending', - 'hook', - 'hook end', - ].forEach((evtName) => { - runner.on(evtName, this.onRunnerEventFired.bind(this, evtName)); - }); - } - - onRunnerEventFired(evtName) { - console.log(evtName); - } -} - -exports = module.exports = Reporter; diff --git a/test/index.sh b/test/index.sh index a932f7a..6a793a4 100755 --- a/test/index.sh +++ b/test/index.sh @@ -76,6 +76,7 @@ test 'TESTCASE: --retries and --bail should work well together' test/bail-and-re test 'TESTCASE: subprocess exits before sending an end message' test/no-subprocess-end/index.js test 'TESTCASE: unhandled rejections should not force subprocess to exit' test/q-promises/index.js test 'TESTCASE: uncaught exceptions should not force subprocess to exit' test/uncaught-exception/index.js +test 'TESTCASE: subprocess reusage' test/subprocess-reuse/index.js echo "Passes: $PASSES Failes: $FAILES" echo "" diff --git a/test/subprocess-reuse/.gitignore b/test/subprocess-reuse/.gitignore new file mode 100644 index 0000000..44b6a6a --- /dev/null +++ b/test/subprocess-reuse/.gitignore @@ -0,0 +1 @@ +counter.json diff --git a/test/subprocess-reuse/README b/test/subprocess-reuse/README new file mode 100644 index 0000000..c6eaa33 --- /dev/null +++ b/test/subprocess-reuse/README @@ -0,0 +1 @@ +Check that subprocesses are reused diff --git a/test/subprocess-reuse/index.js b/test/subprocess-reuse/index.js new file mode 100755 index 0000000..128e018 --- /dev/null +++ b/test/subprocess-reuse/index.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const assert = require('assert'); +const { writeFileSync } = require('fs'); +const { resolve } = require('path'); +const MochaParallelTests = require('../../dist/main/mocha').default; + +const counterFilePath = resolve(__dirname, 'counter.json'); +const reporterPath = resolve(__dirname, '../util/silent-reporter.js'); + +process.on('unhandledRejection', (reason) => { + console.error(reason.stack); + process.exit(1); +}); + +// initialize counter file +writeFileSync(counterFilePath, '[]'); + +const mocha = new MochaParallelTests(); +mocha + .reporter(reporterPath) + .addFile(`${__dirname}/spec/1.spec.js`) + .addFile(`${__dirname}/spec/2.spec.js`) + .addFile(`${__dirname}/spec/3.spec.js`) + .addFile(`${__dirname}/spec/4.spec.js`) + .slow(5000) + .setMaxParallel(2) + .run() + .on('end', function () { + const pidsUsed = require(counterFilePath); + assert.strictEqual(pidsUsed.length, 2, `Number of processes is wrong: ${pidsUsed.length}`); + }); diff --git a/test/subprocess-reuse/spec/1.spec.js b/test/subprocess-reuse/spec/1.spec.js new file mode 100644 index 0000000..9258545 --- /dev/null +++ b/test/subprocess-reuse/spec/1.spec.js @@ -0,0 +1,17 @@ +const { writeFileSync } = require('fs'); +const { resolve } = require('path'); + +const updateCounterWithOwnPid = () => { + const counterFilePath = resolve(__dirname, '../counter.json'); + const pids = new Set(require(counterFilePath)); + + pids.add(process.pid); + writeFileSync(counterFilePath, JSON.stringify([...pids])); +}; + +describe('suite', () => { + it('case', (done) => { + updateCounterWithOwnPid(); + setTimeout(done, 1000); + }); +}); diff --git a/test/subprocess-reuse/spec/2.spec.js b/test/subprocess-reuse/spec/2.spec.js new file mode 100644 index 0000000..9258545 --- /dev/null +++ b/test/subprocess-reuse/spec/2.spec.js @@ -0,0 +1,17 @@ +const { writeFileSync } = require('fs'); +const { resolve } = require('path'); + +const updateCounterWithOwnPid = () => { + const counterFilePath = resolve(__dirname, '../counter.json'); + const pids = new Set(require(counterFilePath)); + + pids.add(process.pid); + writeFileSync(counterFilePath, JSON.stringify([...pids])); +}; + +describe('suite', () => { + it('case', (done) => { + updateCounterWithOwnPid(); + setTimeout(done, 1000); + }); +}); diff --git a/test/subprocess-reuse/spec/3.spec.js b/test/subprocess-reuse/spec/3.spec.js new file mode 100644 index 0000000..9258545 --- /dev/null +++ b/test/subprocess-reuse/spec/3.spec.js @@ -0,0 +1,17 @@ +const { writeFileSync } = require('fs'); +const { resolve } = require('path'); + +const updateCounterWithOwnPid = () => { + const counterFilePath = resolve(__dirname, '../counter.json'); + const pids = new Set(require(counterFilePath)); + + pids.add(process.pid); + writeFileSync(counterFilePath, JSON.stringify([...pids])); +}; + +describe('suite', () => { + it('case', (done) => { + updateCounterWithOwnPid(); + setTimeout(done, 1000); + }); +}); diff --git a/test/subprocess-reuse/spec/4.spec.js b/test/subprocess-reuse/spec/4.spec.js new file mode 100644 index 0000000..9258545 --- /dev/null +++ b/test/subprocess-reuse/spec/4.spec.js @@ -0,0 +1,17 @@ +const { writeFileSync } = require('fs'); +const { resolve } = require('path'); + +const updateCounterWithOwnPid = () => { + const counterFilePath = resolve(__dirname, '../counter.json'); + const pids = new Set(require(counterFilePath)); + + pids.add(process.pid); + writeFileSync(counterFilePath, JSON.stringify([...pids])); +}; + +describe('suite', () => { + it('case', (done) => { + updateCounterWithOwnPid(); + setTimeout(done, 1000); + }); +});