-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Comparing changes
Open a pull request
base repository: mochajs/mocha
base: 7c09e634267ddc18d1ec08a4bfd999efa317d684
head repository: mochajs/mocha
compare: 5f96d511dbf913f135b92198aab721a27f6b44fe
Commits on Mar 12, 2020
-
Configuration menu - View commit details
-
Copy full SHA for c7f5e88 - Browse repository at this point
Copy the full SHA c7f5e88View commit details -
Remove deprecated methods in mocha.js (#4178)
Remove following methods and cleanup. - Mocha.prototype.ignoreLeaks - Mocha.prototype.useColors - Mocha.prototype.useInlineDiffs - Mocha.prototype.hideDiff
Configuration menu - View commit details
-
Copy full SHA for 6aeeb33 - Browse repository at this point
Copy the full SHA 6aeeb33View commit details -
Configuration menu - View commit details
-
Copy full SHA for 2f26478 - Browse repository at this point
Copy the full SHA 2f26478View commit details
Commits on Mar 18, 2020
-
Configuration menu - View commit details
-
Copy full SHA for dfaa654 - Browse repository at this point
Copy the full SHA dfaa654View commit details -
Configuration menu - View commit details
-
Copy full SHA for c1a8adb - Browse repository at this point
Copy the full SHA c1a8adbView commit details
Commits on Mar 19, 2020
-
Drop mkdirp and replace it with fs.mkdirSync (#4200)
- Replace mkdirp with fs.mkdirSync using {recursive: true} - Drop the dependency mkdirp from Mocha - Fix version number of docs and package.json
Configuration menu - View commit details
-
Copy full SHA for f87825a - Browse repository at this point
Copy the full SHA f87825aView commit details
Commits on Mar 20, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 6320d3d - Browse repository at this point
Copy the full SHA 6320d3dView commit details
Commits on Mar 23, 2020
-
Update devDependencies and Travis (#4211)
* update devDependencies * fix linting error * .lintstagedrc.json: advanced to simple format * travis: run browser tests with Node v12
Configuration menu - View commit details
-
Copy full SHA for 0e77e41 - Browse repository at this point
Copy the full SHA 0e77e41View commit details
Commits on Mar 25, 2020
-
Configuration menu - View commit details
-
Copy full SHA for c5fc2be - Browse repository at this point
Copy the full SHA c5fc2beView commit details
Commits on Apr 4, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 54475eb - Browse repository at this point
Copy the full SHA 54475ebView commit details
Commits on Apr 18, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 8236ffd - Browse repository at this point
Copy the full SHA 8236ffdView commit details
Commits on Apr 20, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 38d579a - Browse repository at this point
Copy the full SHA 38d579aView commit details
Commits on Apr 22, 2020
-
remove cruft from wallaby config
also increase default timeout Ref: #4198
Configuration menu - View commit details
-
Copy full SHA for 6838eaf - Browse repository at this point
Copy the full SHA 6838eafView commit details
Commits on Apr 24, 2020
-
refactor Test: add markOnly() for encapsulation (PR #4249)
* add markOnly instance method to test class * add test cases for markOnly method * use markOnly method of test class instead of accessing parent properties method * refactor cases for test markOnly * refactor test class unit test markOnly to exhaustively satisfy Ref: #3689
Configuration menu - View commit details
-
Copy full SHA for 5f9400d - Browse repository at this point
Copy the full SHA 5f9400dView commit details -
enable emoji on website; enable normal ul elements
grouped these together: - Site can now use emoji :party: - Using the `.single-column` class will render a `ul` element as a "normal" list - Suppress the warning about `text` being an unknown language coming out of 11ty/Prism/markdown-it Ref: #4198
Configuration menu - View commit details
-
Copy full SHA for de759d1 - Browse repository at this point
Copy the full SHA de759d1View commit details -
- `landing` reporter befouls the terminal up if `SIGINT` is issued - `--exit` test used an incorrect description, and also did not reliably handle `SIGINT` when running - `runMocha` helper returns the child process Ref: #4198
Configuration menu - View commit details
-
Copy full SHA for 284b411 - Browse repository at this point
Copy the full SHA 284b411View commit details -
travis: add job names, add Node.js v14 to matrix
- fix webhooks - remove webhook for `mochajs/mocha` - add v14 to Appveyor Ref: #4198
Configuration menu - View commit details
-
Copy full SHA for a94e2d3 - Browse repository at this point
Copy the full SHA a94e2d3View commit details -
- make sure that template strings aren't used in debug statements, since they are eager Ref: #4198
Configuration menu - View commit details
-
Copy full SHA for a2efd11 - Browse repository at this point
Copy the full SHA a2efd11View commit details -
should keep more garbage out of the coverage Ref: #4198
Configuration menu - View commit details
-
Copy full SHA for 27b799e - Browse repository at this point
Copy the full SHA 27b799eView commit details -
Configuration menu - View commit details
-
Copy full SHA for 13e94b1 - Browse repository at this point
Copy the full SHA 13e94b1View commit details
Commits on Apr 25, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 4c0231c - Browse repository at this point
Copy the full SHA 4c0231cView commit details
Commits on Apr 26, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 46f727e - Browse repository at this point
Copy the full SHA 46f727eView commit details -
Mark HTTP 429 responses as allowed failures in hyperlink check. We so…
…metimes get these from unpkg and it shouldnt block out builds (#4253)
Configuration menu - View commit details
-
Copy full SHA for e7add63 - Browse repository at this point
Copy the full SHA e7add63View commit details
Commits on Apr 28, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 8bc7579 - Browse repository at this point
Copy the full SHA 8bc7579View commit details -
refactor validatePlugins to throw coded errors
- add `createInvalidPluginError` for reporters, UIs, and future plugins - ensures the original error is output if the module exists, but it throws (see `test/node-unit/cli/fixtures/bad-module.fixture.js`) - remove unneeded `process.cwd()` from call to `path.resolve()` Ref: #4198
Configuration menu - View commit details
-
Copy full SHA for 400bf9b - Browse repository at this point
Copy the full SHA 400bf9bView commit details
Commits on Apr 30, 2020
-
Configuration menu - View commit details
-
Copy full SHA for b5e7183 - Browse repository at this point
Copy the full SHA b5e7183View commit details
Commits on May 1, 2020
-
Did you know that if you click on the "testing" icon on npmjs.com, Mocha is completely absent? It wants the keyword `testing`, which we do not have. So I added that and a bunch more. Since all of the other major test frameworks seem to use keywords of others, might as well join that arms race.
Configuration menu - View commit details
-
Copy full SHA for 14da63a - Browse repository at this point
Copy the full SHA 14da63aView commit details -
Exposing filename in JSON, doc, and json-stream reporters (#4219)
* Exposing filename in JSON reporter * Added filename to json-stream reporter * updated tests and also fixed issue with json-stream reporter * added filenames to doc reporter
Configuration menu - View commit details
-
Copy full SHA for 9c965c9 - Browse repository at this point
Copy the full SHA 9c965c9View commit details
Commits on May 4, 2020
-
assorted test fixes & refactors (#4240)
- increase default timeout for wiggle room - specify `watch-ignore` in case we run our own tests in watch mode - reformat `.mocharc.yml` - `integration/fixtures/uncaught/listeners.fixture.js`: reduce number of listeners created to avoid max listener warning - `integration/fixtures/diffs.spec.js`: do not pass `-C`; the helper already does this - `integration/options/watch.spec.js`: do not use context object; be more specific about spawn options. tweak timings - `node-unit/mocha.spec.js`: make more unit-test-like insofar as that's possible when testing w/ `require()` - `node-unit/cli/config.spec.js`: rewiremock fixes; assertion tweaks; add test for `.cjs` extension - `node-unit/cli/options.spec.js`: rewiremock fixes; increase timeout - `unit/hook-timeout.spec.js`: do not override default (configured) timeout - `unit/runner.spec.js`: leverage [unexpected-eventemitter](https://npm.im/unexpected-eventemitter) - `unit/throw.spec.js`: proper teardown: remove uncaught exception listeners - `unit/timeout.spec.js`: increase timeout to _greater than_ default (configured) value - `example/config/.mocharc.yml`: quote yaml strings BONUS - fixes a weird call to `Mocha.unloadFile()` from `Mocha#unloadFiles()` Ref: #4198
Configuration menu - View commit details
-
Copy full SHA for 2509ab5 - Browse repository at this point
Copy the full SHA 2509ab5View commit details -
test helper improvements (#4241)
* test helper improvements - enables `RawResult` (the result of `invokeMocha()` or `invokeMochaAsync()`) to check the exit code via `to have code` assertion - add passed/failing/pending assertions for `RawRunResult` (the result of `runMocha()` or `runMochaAsync()`) - expose `getSummary()`, which can be used with a `RawResult` (when not failing) - reorganize the module a bit - create `runMochaAsync()` and `runMochaJSONAsync()` which are like `runMocha()` and `runMochaJSON()` except return `Promise`s - better trapping of JSON parse errors - better default handling of `STDERR` output in subprocesses (print it instead of suppress it!) - do not let the `DEBUG` env variable reach subprocesses _unless it was explicitly supplied_ - add an easily copy-paste-able `command` prop to summary - add some missing docstrings Ref: #4198 * increase timeout in watch test for CI the same code should be in PR #4240
Configuration menu - View commit details
-
Copy full SHA for 240cb3d - Browse repository at this point
Copy the full SHA 240cb3dView commit details
Commits on May 5, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 65daa9a - Browse repository at this point
Copy the full SHA 65daa9aView commit details -
Configuration menu - View commit details
-
Copy full SHA for 8b6a76c - Browse repository at this point
Copy the full SHA 8b6a76cView commit details
Commits on May 6, 2020
-
Remove enableTimeout api + allow overriding a disabled timeout (#4260)
* Reset enableTimeouts. Integration test * Spec update * Use function which logs * Remove _enableTimeouts * Defensive check for 0 * Use correct timeout value * Remove superfluous logic. * Add note about `enableTimeouts` to docs * Update comment * Lint fix * Disable if setting == or grtr to upper * Swap asser to expect * Excl docs in coverage + clamp in suite. * Add note about async tests
Configuration menu - View commit details
-
Copy full SHA for c0137eb - Browse repository at this point
Copy the full SHA c0137ebView commit details
Commits on May 11, 2020
-
Add ability to run tests in a mocha instance multiple times (#4234); c…
…loses #2783 * Add ability to run tests in a mocha instance multiple times * Rename `autoDispsoe` to `cleanReferencesAfterRun`, Rename since we cannot dispose the entire mocha instance after a test run. We should keep the process.on('uncaughtException') handlers in place in order to not break existing functionality. * Allow `unloadFiles` to reset `referencesCleaned`. * Complete rename of _cleanReferencesAfterRun * Add integration test for running a suite multiple times * improve api docs * Docs: fix dead link * Make sure tests run on older node versions * Remove `.only` 😅 * Implement `process.listenerCount` in the browser * Implement mocha states in a finite state machine * Fix some small remarks * Make integration tests more damp * Keep `Runner` api backward compatible * Unload files when disposed * Runnable.reset should also reset `err` and `state` * Also reset hooks Co-authored-by: Christopher Hiller <boneskull@boneskull.com>
Configuration menu - View commit details
-
Copy full SHA for fbe3ce4 - Browse repository at this point
Copy the full SHA fbe3ce4View commit details
Commits on May 12, 2020
-
--forbid-only doesn't recognize
it.only
whenbefore
crashes (#4256)……; closes #3840 * add fixtures that result in it.only combined with --forbid-only bug * adapt forbidonly test cases to cover it.only bug * check if forbid only option is set prior to marking a test only and throw error * change name of only test back to previous * use custom assertion for expecting error in forbidOnly tests * remove empty line * use createUnsupportedError instead of throw new Error * use createUnsupportedError instead of throw new Error * remove check if suite hasOnly and forbidOnly option is set as this is done before runtime * implement markOnly instance method in suite class * add unit test for suites markOnly method * throw exception if --forbid-only option is set even if suite is not selected by grep * adapt forbidOnly integration tests to check for failure if only suite is not selected by grep * fix jsdocs of suite markonly * Revert "fix jsdocs of suite markonly" This reverts commit cffc71a. * Revert "adapt forbidOnly integration tests to check for failure if only suite is not selected by grep" This reverts commit 336425a. * Revert "throw exception if --forbid-only option is set even if suite is not selected by grep" This reverts commit f871782. * Revert "add unit test for suites markOnly method" This reverts commit c2c8dc8. * Revert "implement markOnly instance method in suite class" This reverts commit 4b37e3c.
Configuration menu - View commit details
-
Copy full SHA for 184036f - Browse repository at this point
Copy the full SHA 184036fView commit details
Commits on May 14, 2020
-
fix test/unit/hook.spec.js (#4288)
* fix test/unit/hook.spec.js `Function.prototype.name` is not available in IE11, and will cause the browser tests to fail. * another IE11 fix: avoid Array.prototype.findIndex Signed-off-by: Christopher Hiller <boneskull@boneskull.com>
Configuration menu - View commit details
-
Copy full SHA for 81e203c - Browse repository at this point
Copy the full SHA 81e203cView commit details -
fix improper warnings for invalid reporters (#4275)
* fix improper warnings for invalid reporters also: reorganize, add, and refactor a bunch of problematic unit tests for `lib/mocha.js`. better isolation except where we can't really do that (calling `require`) there's still missing tests in here, but this is an improvement. * restrict use of Object.assign in ESLint config * add wrapper around process.cwd() - better isolation - a use of `process.cwd()` in `lib/runner.js` was left in place to avoid conflicts, because another PR will remove it
Configuration menu - View commit details
-
Copy full SHA for 1a4646d - Browse repository at this point
Copy the full SHA 1a4646dView commit details
Commits on May 18, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 442cf5f - Browse repository at this point
Copy the full SHA 442cf5fView commit details -
smart quotes and such on website; closes #3716
I do not know if this actually works, but it might. Signed-off-by: Christopher Hiller <boneskull@boneskull.com>
Configuration menu - View commit details
-
Copy full SHA for 68eec9e - Browse repository at this point
Copy the full SHA 68eec9eView commit details -
do not commit generated content to VCS; closes #3713 (#4289)
* do not commit generated content to VCS This removes `markdown-magic` and replaces its functionality with the built-in data capabilities of 11ty. The TOC, `--help` output, and source files are now all done via global data scripts in `docs/_data`. When building documentation, we will no longer get changes to e.g., `docs/index.md` because of the automatically generated content. * add inclusive language plugin to eleventy Usage of the words as defined in options will result in a warning, and will not break the build. Also: Eleventy should ignore the historical changelogs in `docs/changelogs`.
Configuration menu - View commit details
-
Copy full SHA for ca0daa3 - Browse repository at this point
Copy the full SHA ca0daa3View commit details -
(documentation will be in another PR) Adds "root hook plugins", a system to define root hooks via files loaded with `--require`. This enables root hooks to work in parallel mode. Because parallel mode runs files in a non-deterministic order, and files do not share a `Mocha` instance, it is not possible to share these hooks with other test files. This change also works well with third-party libraries for Mocha which need the behavior; these can now be trivially consumed by adding `--require` or `require: 'some-library'` in Mocha's config file. The way it works is: 1. When a file is loaded via `--require`, we check to see if that file exports a property named `mochaHooks` (can be multiple files). 1. If it does, we save a reference to the property. 1. After Yargs' validation phase, we use async middleware to execute root hook plugin functions--or if they are objects, just collect them--and we flatten all hooks found into four buckets corresponding to the four hook types. 1. Once `Mocha` is instantiated, if it is given a `rootHooks` option, those hooks are applied to the root suite. This works with parallel tests because we can save a reference to the flattened hooks in each worker process, and a new `Mocha` instance is created with them for each test file. * * * Tangential: - Because a root hook plugin can be defined as an `async` function, I noticed that `utils.type()` does not return `function` for async functions; it returns `asyncfunction`. I've added a (Node-specific, for now) test for this. - `handleRequires` is now `async`, since it will need to be anyway to support ESM and calls to `import()`. - fixed incorrect call to `fs.existsSync()` Ref: #4198
Configuration menu - View commit details
-
Copy full SHA for 722ce01 - Browse repository at this point
Copy the full SHA 722ce01View commit details
Commits on May 20, 2020
-
multiple async done() calls result in failure; closes #4151 (#4152)
- added a method in `errors` module to create a "multiple done" err - modernize `multiple-done.spec.js` - refactor errors into constants in `errors` module - remove `Runner#started` prop; replace with `Runner#state` prop + constants - add a catchall `createFatalError()` function to `errors` module; this is called when a test fails twice by other means (unsure what those means are yet) - force color in Travis CI b/c my eyes - remove `Runner#uncaughtEnd`; move logic to `Runner#uncaught`, since we can now rely on the value of `Runner#state`. - upgrade `unexpected-eventemitter` - fix potential listener leak in `Runner#run`
Configuration menu - View commit details
-
Copy full SHA for cb5eb8e - Browse repository at this point
Copy the full SHA cb5eb8eView commit details
Commits on May 22, 2020
-
fetch sponsors at build time, show ALL non-skeevy sponsors; closes #4271
(#4272) * Show all sponsors on site - change ordering: sponsors, then backers - blacklist bad actors - rename `default.html` to `default.liquid`, because it's a Liquid template. - fiddles with the CSS a bit - do not attempt to display a link if there is no website * use smaller imgs for backers * Fetch all open collective sponsor images to save their dimensions * Reworked avatars. LEss reflows due to image dimensions. Smoother loading animation that doesn't wait for all images. Progressive enhanced * Add standardised lazy loading to all images * Set height on badges to avoid page reflows * Add node version specification in .nvmrc to get netlify up to date * Move avatars javascript to external file for better development experience Co-authored-by: Peter Müller <munter@fumle.dk>
Configuration menu - View commit details
-
Copy full SHA for 12b130b - Browse repository at this point
Copy the full SHA 12b130bView commit details
Commits on May 23, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 1a2e693 - Browse repository at this point
Copy the full SHA 1a2e693View commit details -
Configuration menu - View commit details
-
Copy full SHA for 283b11e - Browse repository at this point
Copy the full SHA 283b11eView commit details
Commits on May 26, 2020
-
- add notes about what it is intended to do, and what it cannot do Signed-off-by: Christopher Hiller <boneskull@boneskull.com>
Configuration menu - View commit details
-
Copy full SHA for 6d60eb0 - Browse repository at this point
Copy the full SHA 6d60eb0View commit details
Commits on Jun 1, 2020
-
add support for running tests in parallel mode
* add support for running tests in parallel mode > (this PR depends on most other PRs linked to #4198, so they should be merged first; documentation will be in another PR) This PR adds support for running test files in parallel via `--parallel`. For many cases, this should "just work." When the `--parallel` flag is supplied, Mocha will swap out the default `Runner` (`lib/nodejs/runner.js`) for `ParallelBufferedRunner` (`lib/nodejs/parallel-buffered-runner.js`). `ParallelBufferedRunner` _extends_ `Runner`. `ParallelBufferedRunner#run()` is the main point of extension. Instead of executing the tests in serial, it will create a pool of worker processes (not worker _threads_) based on the maximum job count (`--jobs`; defaults to `<number of CPU cores> - 1`). Both `ParallelBufferedRunner` and the `worker` module consume the abstraction layer, [workerpool](https://npm.im/workerpool). `ParallelBufferedRunner#run()` does _not_ load the test files, unlike `Runner#run()`. Instead, it has a list of test files, and puts these into an async queue. The `EVENT_RUN_BEGIN` event is then emitted. As files enter the queue, `ParallelBufferedRunner#run()` tells `workerpool` to execute the `run()` function of the pool. `workerpool` then launches as many worker processes are needed--up to the maximum--and executes the `run()` function with a single filepath and any options for a `Mocha` instance. The first time `lib/nodejs/worker.js` is invoked, it will "bootstrap" itself, by handling `--require`'d modules and validating the UI. Note that _reporter validation_ does not occur. Once bootstrapped, it instantiate `Mocha`, add the single file, swap any reporter out for the `ParallelBuffered` reporter (`lib/nodejs/reporters/parallel-buffered.js`) then execute `Mocha#run()`, which invokes `Runner#run()`. The `ParallelBuffered` reporter listens for events emitting from the `Runner` instance, like a reporter usually does. But instead of outputting to the console, it buffers the events in a queue. Once the file has completed running, the queue is drained: the events collected are (trivially) serialized for transmission back to the main process. `ParallelBufferedRunner#run()` receives the list of events, trivially _deserializes_ them, and re-emits the events to whatever the chosen reporter is (e.g., the `spec` reporter). In this way, the reporters don't know that the tests were run in parallel. Practically, the user will see reporter output in "chunks" instead of the "stream" of results they usually expect. This method ensures that while the test files run in a nondeterministic order, the reporter output will be deterministic for any given test file. Once the result (the queue of events) has been returned to the main process, the worker process stays open, but waits for further instruction. If there are more files in `ParallelBufferedRunner#run()`'s queue, `workerpool` will instruct the worker to take the next file from the list, and so on, and so forth. When all files have executed, the pool terminates, the `EVENT_RUN_END` event is emitted, and the reporter handles it. Note that exclusive tests ("only") cannot work in parallel mode, because we do not load all files up-front. > (this section is pasted from the documentation with minimal edits) ### Caveats: Reporters Due to the nature of the following reporters, they cannot work when running tests in parallel: - `markdown` - `progress` - `json-stream` These reporters expect Mocha to know _how many tests it plans to run_ before execution. This information is unavailable in parallel mode, as test files are loaded only when they are about to be run. ### Caveats: Buffered Output In serial mode, tests results will "stream" as they occur. In parallel mode, reporter output is _buffered_; reporting will occur after each file is completed. In practice, the reporter output will appear in "chunks" (but will otherwise be identical). ### Caveats: Nondeterminism In parallel mode, we have no guarantees about the order in which test files will be run--or what process runs them--as it depends on the execution times of the test files. Because of this, the following options _cannot be used_ in parallel mode: - `--file` - `--sort` - `--delay` Because running tests in parallel mode uses more system resources at once, the OS may take extra time to schedule and complete some operations. For this reason, test timeouts may need to be increased either globally or otherwise. ### Caveats: Other Impacted Options When used with `--bail` (or `this.bail()`) to exit after the first failure, it's likely other tests will be running at the same time. Mocha must shut down its worker processes before exiting. Likewise, subprocesses may throw uncaught exceptions. When used with `--allow-uncaught`, Mocha will "bubble" this exception to the main process, but still must shut down its processes. `--forbid-only` does not work in parallel mode, for a similar reason to the unsupported reporters. > _NOTE: This only applies to test files run parallel mode_. ### Caveats: Root Hooks A _root hook_ is a hook in a test file which is _not defined_ within a suite. An example using the `bdd` interface: ```js // test/setup.js beforeEach(function() { doMySetup(); }); afterEach(function() { doMyTeardown(); }); ``` When run (in the default "serial" mode) via `mocha --file "./test/setup.js" "./test/**/*.spec.js"`, `setup.js` will be executed _first_, and install the two hooks shown above for every test found in `./test/**/*.spec.js`. **When Mocha runs in parallel mode, test files do not share the same process.** Consequently, a root hook defined in test file _A_ won't be present in test file _B_. There are a (minimum of) two workarounds for this: 1. `require('./setup.js')` or `import './setup.js'` at the top of every test file. Best avoided for those averse to boilerplate. 1. _Recommended_: Define root-level hooks in a required file, using the new (also as of VERSION) Root Hook Plugin system. ### Caveats: Node.js Only, For Now Parallel mode is only available in Node.js. ### Migration Checklist If you find your tests don't work properly when run with `--parallel`, either shrug and move on, or use this handy-dandy checklist to get things working: - ✅ Ensure you are using a supported reporter. - ✅ Ensure you are not using other unsupported flags. - ✅ Double-check your config file; options set in config files will be merged with any command-line option. - ✅ Look for root-level hooks in your tests. Move them into a root hook plugin. - ✅ Do any assertion, mock, or other test libraries you're consuming use root hooks? They may need to be migrated for compatibility with parallel mode. - ✅ If tests are unexpectedly timing out, you may need to increase the default test timeout (via `--timeout`) - ✅ Ensure your tests do not depend on being run in a specific order. - ✅ Ensure your tests clean up after themselves; remove temp files, handles, sockets, etc. Don't try to share state or resources between test files. ### About Parallelism Some types of tests are _not_ so well-suited to run in parallel. For example, extremely timing-sensitive tests, or tests which make I/O requests to a limited pool of resources (such as opening ports, or automating browser windows, hitting a test DB, or remote server, etc.). Free-tier cloud CI services may not provide a suitable multi-core container or VM for their build agents. Regarding expected performance gains in CI: your mileage may vary. It may help to use a conditional in a `.mocharc.js` to check for `process.env.CI`, and adjust the job count as appropriate. It's unlikely (but not impossible) to see a performance gain from a job count _greater than_ the number of available CPU cores. That said, _play around with the job count_--there's no one-size-fits all, and the unique characteristics of your tests will determine the optimal number of jobs; it may even be that fewer is faster! ### Change Details - updated signal handling in `bin/mocha` to a) better work with Windows, and b) work properly with `--parallel` to avoid leaving zombie workers - docstrings in `lib/nodejs/cli/collect-files.js` - refactors in `lib/nodejs/cli/run-helpers.js` and `lib/nodejs/cli/watch-run.js`. We now have four methods: - `watchRun()` - serial + watch - `singleRun()` - serial - `parallelWatchRun()` - parallel + watch - `parallelRun()` - parallel - `lib/nodejs/cli/run.js` and `lib/nodejs/cli/run-option-metadata.js`: additions for new options and checks for incompatibility - add `lib/nodejs/reporters/buffered.js` (`ParallelBuffered`); this reporter is _not_ re-exported in `Mocha.reporters`, since it should only be invoked internally. - tweak `landing` reporter to avoid referencing `Runner#total`, which is incompatible with parallel mode. It didn't need to do so in the first place! - the `tap` reporter now outputs the plan at the _end_ instead of at the beginning (avoiding a call to `Runner#grepTotal()`, which is incompatible with parallel mode). This is within spec, so should not be a breaking change. - add `lib/nodejs/parallel-buffered-runner.js` (`ParallelBufferedRunner`); subclass of `Runner` which overrides the `run()` method. - There's a little custom finite state machine in here. didn't want to pull in a third-party module, but we should consider doing so if we use FSM's elsewhere. - when `DEBUG=mocha:parallel*` is in the env, this module will output statistics about the worker pool every 5s - the `run()` method looks a little weird because I wanted to use `async/await`, but the method it is overriding (`Runner#run`) is _not_ `async` - traps `SIGINT` to gracefully terminate the pool - pulls in [promise.allsettled](https://npm.im/promise.allsettled) polyfill to handle workers that may have rejected with uncaught exceptions - "bail" support is best-effort. - the `ABORTING` state is only for interruption via `SIGINT` or if `allowUncaught` is true and we get an uncaught exception - `Hook`, `Suite`, `Test`: add a `serialize()` method. This pulls out the most relevant information about the object for transmission over IPC. It's called by worker processes for each event received by its `Runner`; event arguments (e.g., `test` or `suite`) are serialized in this manner. Note that this _limits what reporters have access to_, which may break compatibility with third-party reporters that may use information that is missing from the serialized object. As those cases arise, we can add more information to the serialized objects (in some cases). The `$$` convention tells the _deserializer_ to turn the property into a function which returns the passed value, e.g., `test.fullTitle()`. - `lib/nodejs/mocha.js`: - refactor `Mocha#reporter` for nicer parameter & variable names - rename `loadAsync` to `lazyLoadFiles`, which is more descriptive, IMO. It's a private property, so should not be a breaking change. - Constructor will dynamically choose the appropriate `Runner` - `lib/nodejs/runner.js`: `ParallelBufferedRunner` needs the options from `Mocha#options`, so I updated the parent method to define the parameter. It is unused here. - add `lib/nodejs/serializer.js`: on the worker process side, manages event queue serialization; manages deserialization of the event queue in the main process. - I spent a long time trying to get this working. We need to account for things like `Error` instances, with their stack traces, since those can be event arguments (e.g., `EVENT_TEST_FAIL` sends both a `Test` and the `Error`). It's impossible to serialize circular (self-referential) objects, so we need to account for those as well. - Not super happy with the deserialization algorithm, since it's recursive, but it shouldn't be too much of an issue because the serializer won't output circular structures. - Attempted to avoid prototype pollution issues - Much of this works by mutating objects, mostly because it can be more performant. The code can be changed to be "more immutable", as that's likely to be easier to understand, if it doesn't impact performance too much. We're serializing potentially very large arrays of stuff. - The `__type` prop is a hint for the deserializer. This convention allows us to re-expand plain objects back into `Error` instances, for example. You can't send an `Error` instance over IPC! - add `lib/nodejs/worker.js`: - registers its `run()` function with `workerpool` to be called by main process - if `DEBUG=mocha:parallel*` is set, will output information (on an interval) about long-running test files - afaik the only way `run()` can reject is if `allowUncaught` is true or serialization fails - any user-supplied `reporter` value is replaced with the `ParallelBuffered` reporter. thus, reporters are not validated. - the worker uses `Runner`, like usual. - tests: - see `test/integration/options/parallel.spec.js` for the interesting stuff - upgrade `unexpected` for "to have readonly property" assertion - upgrade `unexpected-eventemitter` for support async function support - integration test helpers allow Mocha's developers to use `--bail` and `--parallel`, but will default to `--no-bail` and `--no-parallel`. - split some node-specific tests out of `test/unit/mocha.spec.js` into `test/node-unit/mocha.spec.js` - add some missing coverage in `test/node-unit/worker.spec.js` - etc: - update `.eslintrc.yml` for new Node-only files - increase default timeout to `1000` (also seen in another PR) and use `parallel` mode by default in `.mocharc.yml` - run node unit tests _in serial_ as sort of a smoke test, as otherwise all our tests would be run in parallel - karma, browserify: ignore files for parallel support - force color output in CI. this is nice on travis, but ugly on appveyor. either way, it's easier to read than having no color - move non-CLI-related node-specific files into `lib/nodejs/nodejs/` - correct some issues with APIs not marked `@private` - add some istanbul directives to ignore some debug statements - add `utils.isBrowser()` for easier mocking of a `process.browser === true` situation - add `createForbiddenExclusivityError()` Ref: #4198 Signed-off-by: Christopher Hiller <boneskull@boneskull.com>
Configuration menu - View commit details
-
Copy full SHA for 2078c32 - Browse repository at this point
Copy the full SHA 2078c32View commit details -
Support --require of ESM; closes #4281 (#4304)
* Support --require of ESM; closes #4281 Allow files/modules specified in `--require` to be ESM. CommonJS loading is still supported and the default. * Conditionally generate url for import Windows compatible * Add tests for --require ESM As both .mjs and type=module (combined with cjs for good measure). Updated linter to allow tests to use spread operator (ecmaVersion 2018) Allow --require'd module to be an object, or "module" * Revert change to eslintrc, use mocha to pass experimental flag * Replace type() -> typeof Add truthy check to handle null edge case type(ES Module) => "module", but we treat it the same as an object * Remove doc limitation for --require ESM * Add note to --require docs about ESM support
Configuration menu - View commit details
-
Copy full SHA for 273dbbb - Browse repository at this point
Copy the full SHA 273dbbbView commit details
Commits on Jun 2, 2020
-
add docs for parallel and root hooks
> this PR needs the changes from the `boneskull/issue/2839-11ty-changes` branch
Configuration menu - View commit details
-
Copy full SHA for 63eb80b - Browse repository at this point
Copy the full SHA 63eb80bView commit details
Commits on Jun 5, 2020
-
fix bad error message when incorrectly using ESM
- re-enable parallel-mode root hook plugin tests - refactor root hook plugin tests to avoid flake Signed-off-by: Christopher Hiller <boneskull@boneskull.com>
Configuration menu - View commit details
-
Copy full SHA for 9881ace - Browse repository at this point
Copy the full SHA 9881aceView commit details
There are no files selected for viewing
This file was deleted.