Skip to content

Commit

Permalink
Browser: fix 'allowUncaught' handling (#4174)
Browse files Browse the repository at this point in the history
  • Loading branch information
juergba committed Feb 13, 2020
1 parent 2ff1cb2 commit ac12f2c
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 10 deletions.
2 changes: 1 addition & 1 deletion browser-entry.js
Expand Up @@ -60,7 +60,7 @@ process.on = function(e, fn) {
if (e === 'uncaughtException') {
global.onerror = function(err, url, line) {
fn(new Error(err + ' (' + url + ':' + line + ')'));
return !mocha.allowUncaught;
return !mocha.options.allowUncaught;
};
uncaughtExceptionHandlers.push(fn);
}
Expand Down
10 changes: 2 additions & 8 deletions docs/index.md
Expand Up @@ -24,7 +24,6 @@ Mocha is a feature-rich JavaScript test framework running on [Node.js][] and in
- [javascript API for running tests](#more-information)
- proper exit status for CI support etc
- [auto-detects and disables coloring for non-ttys](#reporters)
- [maps uncaught exceptions to the correct test case](#browser-specific-methods)
- [async test timeout support](#delayed-root-suite)
- [test retry support](#retry-tests)
- [test-specific timeouts](#test-level)
Expand Down Expand Up @@ -666,7 +665,7 @@ describe('outer', function() {
});
```

> _Updated in v7.0.0. Skipping a test within an "after all" hook is disallowed and will throw an exception. Use a return statement or other means to abort hook execution._
> _Updated in v7.0.0:_ skipping a test within an "after all" hook is disallowed and will throw an exception. Use a return statement or other means to abort hook execution.
Before Mocha v3.0.0, `this.skip()` was not supported in asynchronous tests and hooks.

Expand Down Expand Up @@ -1543,12 +1542,6 @@ Alias: `HTML`, `html`

Mocha runs in the browser. Every release of Mocha will have new builds of `./mocha.js` and `./mocha.css` for use in the browser.

### Browser-specific methods

The following method(s) _only_ function in a browser context:

`mocha.allowUncaught()` : If called, uncaught errors will not be absorbed by the error handler.

A typical setup might look something like the following, where we call `mocha.setup('bdd')` to use the **BDD** interface before loading the test scripts, running them `onload` with `mocha.run()`.

```html
Expand Down Expand Up @@ -1600,6 +1593,7 @@ mocha.setup({

// Examples of options:
mocha.setup({
allowUncaught: true,
asyncOnly: true,
bail: true,
checkLeaks: true,
Expand Down
3 changes: 2 additions & 1 deletion lib/runner.js
Expand Up @@ -800,7 +800,8 @@ Runner.prototype.uncaught = function(err) {
if (err instanceof Pending) {
return;
}
if (this.allowUncaught) {
// browser does not exit script when throwing in global.onerror()
if (this.allowUncaught && !process.browser) {
throw err;
}

Expand Down
2 changes: 2 additions & 0 deletions test/unit/runner.spec.js
Expand Up @@ -709,6 +709,8 @@ describe('Runner', function() {

describe('when allow-uncaught is set to true', function() {
it('should propagate error and throw', function() {
if (process.browser) this.skip();

var err = new Error('should rethrow err');
runner.allowUncaught = true;
expect(
Expand Down

0 comments on commit ac12f2c

Please sign in to comment.