[web-test-runner] Allow web test runner to fail a test / suite when there are uncaught promise rejections
We noticed that our test suite was passing, but unit tests were printing an error like this one:
build 18-Oct-2021 17:26:54 An error was thrown in a Promise outside a test. Did you forget to await a function or assertion?
build 18-Oct-2021 17:26:54 TypeError: Cannot read property 'getBoundingClientRect' of undefined
Upon further investigation, this revealed a real bug. We would like to consider these failures. Is there a good way to fail the tests based on uncaught promise resolutions at the test runner level?
I thought of a couple solutions:
- pipe logs into grep
- add an unhandled promise rejection listener to
beforebefore all test suites
But, I know there's already some mechanism for filtering logs and it seems like it might be possible to hook into it in a neat way.
I'm using mocha, if it makes a difference.
It seems like @LarsDenBakker wrote most of the logging stuff, so I'm curious to hear his opinion.
Hi, thanks for the issue. Lars was on vacation the last time I checked with him. But this does seem like a bug. Feel free to submit a PR if you would like to contribute, I can help with reviewing and merging it.
This is an issue with mocha, not with WTR. Mocha runs the actual tests in the browser.
This issue seems to indicate that unhandled rejections were included in mocha's exit code at one point, but not as of 8.2.1: https://github.com/mochajs/mocha/issues/2640
Here is where WTR is doing the helpful logging: https://github.com/modernweb-dev/web/blob/f878640188dd28def54705ee05dee05ff49c9cee/packages/browser-logs/src/logUncaughtErrors.ts#L8
I will look into adding a userland patch until mocha is fixed. Will post it on here if I come up with something good.