-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: throw an error and a warning if .poll
, .element
, .rejects
/.resolves
, and locator.*
weren't awaited
#6877
fix: throw an error and a warning if .poll
, .element
, .rejects
/.resolves
, and locator.*
weren't awaited
#6877
Conversation
@hi-ogawa this was pretty easy to do 😄 |
✅ Deploy Preview for vitest-dev ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
I was bitten by this many times 😓 |
@hi-ogawa @AriPerkkio should we do the same with |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me 👍
One caveat is that it's not a genuine promise tracker, so something like these get through.
test('repro', async () => {
myPollWrapper();
Promise.all([
expect.poll(() => 3).toBe(4),
expect.poll(() => 3).toBe(4),
]);
})
async function myPollWrapper() {
await expect.poll(() => 3).toBe(4);
}
But these are only false-negative of some edge cases and I don't see any false-positive, so this should be a nice improvement.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good! Showing the erroneous line is really nice dx improvement. 💯
should we do the same with
.resolves
and.rejects
?
Sure why not. I'm not familiar with internals of expect
, but could this be done on any higher level instead of patching all matchers?
Does this means we remove |
Hm, I am not sure what is better 🤔 I like to be stricter, but I don't know if we can enforce it now 🤔 The |
I think maybe we should also throw an error or show a warning if locator methods were not awaited: getByRole('button').click()
expect(button).toHaveText('123') React shows a warning if What do you think? |
a6a4fb5
to
15a6965
Compare
.poll
or .element
wasn't awaited.poll
, .element
wasn't awaited
.poll
, .element
wasn't awaited.poll
, .element
, .rejects
/.resolves
, and locator.*
weren't awaited
da62143
to
cc14a69
Compare
##### [v2.1.5](https://github.com/vitest-dev/vitest/releases/tag/v2.1.5) ##### 🚀 Features - **experimental**: Expose vite on the test project as a separate field - by [@sheremet-va](https://github.com/sheremet-va) [<samp>(bcc59)</samp>](vitest-dev/vitest@bcc59088) ##### 🐞 Bug Fixes - `dangerouslyIgnoreUnhandledErrors` without base reporter - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6808 [<samp>(0bf0a)</samp>](vitest-dev/vitest@0bf0ab00) - Capture `unhandledRejection` even when base reporter is not used - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6812 [<samp>(8878b)</samp>](vitest-dev/vitest@8878b04d) - Don't change the working directory when loading workspace projects - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6811 [<samp>(f0aea)</samp>](vitest-dev/vitest@f0aeaca8) - Remove `sequence.concurrent` from the `RuntimeConfig` type - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6880 [<samp>(6af73)</samp>](vitest-dev/vitest@6af73d93) - Stop the runner before restarting, restart on workspace config change - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6859 [<samp>(b01df)</samp>](vitest-dev/vitest@b01df47d) - Don't rerun on Esc or Ctrl-C during watch filter - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6895 [<samp>(98f76)</samp>](vitest-dev/vitest@98f76ea7) - Print ssrTransform error - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6885 [<samp>(4c96c)</samp>](vitest-dev/vitest@4c96cce7) - Throw an error and a warning if `.poll`, `.element`, `.rejects`/`.resolves`, and `locator.*` weren't awaited - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6877 [<samp>(93b67)</samp>](vitest-dev/vitest@93b67c24) - **browser**: - Don't process the default css styles - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6861 [<samp>(0d67f)</samp>](vitest-dev/vitest@0d67f04b) - Support non US key input - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6873 [<samp>(5969d)</samp>](vitest-dev/vitest@5969d8da) - Stop the browser rpc when the pool is closed - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6858 [<samp>(9a0c9)</samp>](vitest-dev/vitest@9a0c93d7) - Init browsers eagerly when tests are running - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6876 [<samp>(417bd)</samp>](vitest-dev/vitest@417bdb42) - **coverage**: - Report uncovered files when re-run by `enter` or `'a'` - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6848 [<samp>(487c8)</samp>](vitest-dev/vitest@487c80ae) - **ui**: - Remove crossorigin attributes for same origin assets - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6883 [<samp>(6e793)</samp>](vitest-dev/vitest@6e793c64) - **vite-node**: - Improve esm check to decide external - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6816 [<samp>(7e1fa)</samp>](vitest-dev/vitest@7e1faf3d) - Top-level throw in module is not reported properly - by [@vanaigr](https://github.com/vanaigr) and [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6840 [<samp>(cf0cb)</samp>](vitest-dev/vitest@cf0cbf6a) - **vitest**: - Use fetch() implementation from happy-dom - by [@capricorn86](https://github.com/capricorn86) in vitest-dev/vitest#6879 [<samp>(3c56f)</samp>](vitest-dev/vitest@3c56feb4) ##### 🏎 Performance - Limit workspace project concurrency to available cores - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6869 [<samp>(f4c04)</samp>](vitest-dev/vitest@f4c04ab6) ##### [View changes on GitHub](vitest-dev/vitest@v2.1.4...v2.1.5)
##### [v2.1.5](https://github.com/vitest-dev/vitest/releases/tag/v2.1.5) ##### 🚀 Features - **experimental**: Expose vite on the test project as a separate field - by [@sheremet-va](https://github.com/sheremet-va) [<samp>(bcc59)</samp>](vitest-dev/vitest@bcc59088) ##### 🐞 Bug Fixes - `dangerouslyIgnoreUnhandledErrors` without base reporter - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6808 [<samp>(0bf0a)</samp>](vitest-dev/vitest@0bf0ab00) - Capture `unhandledRejection` even when base reporter is not used - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6812 [<samp>(8878b)</samp>](vitest-dev/vitest@8878b04d) - Don't change the working directory when loading workspace projects - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6811 [<samp>(f0aea)</samp>](vitest-dev/vitest@f0aeaca8) - Remove `sequence.concurrent` from the `RuntimeConfig` type - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6880 [<samp>(6af73)</samp>](vitest-dev/vitest@6af73d93) - Stop the runner before restarting, restart on workspace config change - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6859 [<samp>(b01df)</samp>](vitest-dev/vitest@b01df47d) - Don't rerun on Esc or Ctrl-C during watch filter - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6895 [<samp>(98f76)</samp>](vitest-dev/vitest@98f76ea7) - Print ssrTransform error - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6885 [<samp>(4c96c)</samp>](vitest-dev/vitest@4c96cce7) - Throw an error and a warning if `.poll`, `.element`, `.rejects`/`.resolves`, and `locator.*` weren't awaited - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6877 [<samp>(93b67)</samp>](vitest-dev/vitest@93b67c24) - **browser**: - Don't process the default css styles - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6861 [<samp>(0d67f)</samp>](vitest-dev/vitest@0d67f04b) - Support non US key input - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6873 [<samp>(5969d)</samp>](vitest-dev/vitest@5969d8da) - Stop the browser rpc when the pool is closed - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6858 [<samp>(9a0c9)</samp>](vitest-dev/vitest@9a0c93d7) - Init browsers eagerly when tests are running - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6876 [<samp>(417bd)</samp>](vitest-dev/vitest@417bdb42) - **coverage**: - Report uncovered files when re-run by `enter` or `'a'` - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6848 [<samp>(487c8)</samp>](vitest-dev/vitest@487c80ae) - **ui**: - Remove crossorigin attributes for same origin assets - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6883 [<samp>(6e793)</samp>](vitest-dev/vitest@6e793c64) - **vite-node**: - Improve esm check to decide external - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6816 [<samp>(7e1fa)</samp>](vitest-dev/vitest@7e1faf3d) - Top-level throw in module is not reported properly - by [@vanaigr](https://github.com/vanaigr) and [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6840 [<samp>(cf0cb)</samp>](vitest-dev/vitest@cf0cbf6a) - **vitest**: - Use fetch() implementation from happy-dom - by [@capricorn86](https://github.com/capricorn86) in vitest-dev/vitest#6879 [<samp>(3c56f)</samp>](vitest-dev/vitest@3c56feb4) ##### 🏎 Performance - Limit workspace project concurrency to available cores - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6869 [<samp>(f4c04)</samp>](vitest-dev/vitest@f4c04ab6) ##### [View changes on GitHub](vitest-dev/vitest@v2.1.4...v2.1.5)
Description
If
expect.poll().to*
orexpect.element().to*
is not awaited, the test will now fail. The stack trace leads to the line where it's called. The callback to.poll
will never be called to avoid unhandled rejections.If
expect.rejects
/expect.resolves
was not awaited, Vitest will print a warning:If async
locator.*
methods are not awaited, Vitest will fail the test. The RPC will never be called to avoid unhandled rejections:TODO:
Please don't delete this checklist! Before submitting the PR, please make sure you do the following:
pnpm-lock.yaml
unless you introduce a new test example.Tests
pnpm test:ci
.Documentation
pnpm run docs
command.Changesets
feat:
,fix:
,perf:
,docs:
, orchore:
.