@@ -117,6 +117,119 @@ it('prints a warning if the assertion is not awaited', async () => {
117117 ` )
118118} )
119119
120+ it ( 'no async tracking after then/catch/finally' , async ( ) => {
121+ // resolve + then/catch/finally
122+ // rejects + then/catch/finally
123+ // expect.poll + then/catch/finally
124+ const { stderr, errorTree } = await runInlineTests ( {
125+ 'await.test.js' : ts `
126+ import { expect, test } from 'vitest';
127+
128+ test('resolves + then', async () => {
129+ await expect(Promise.resolve(1)).resolves.toBe(1).then()
130+ })
131+
132+ test('resolves + catch', async () => {
133+ await expect(Promise.resolve(1)).resolves.toBe(1).catch()
134+ })
135+
136+ test('resolves + finally', async () => {
137+ await expect(Promise.resolve(1)).resolves.toBe(1).finally()
138+ })
139+
140+ test('rejects + then', async () => {
141+ await expect(Promise.reject(1)).rejects.toBe(1).then()
142+ })
143+
144+ test('rejects + catch', async () => {
145+ await expect(Promise.reject(1)).rejects.toBe(1).catch()
146+ })
147+
148+ test('rejects + finally', async () => {
149+ await expect(Promise.reject(1)).rejects.toBe(1).finally()
150+ })
151+
152+ test('expect.poll + then', async () => {
153+ await expect.poll(() => 2).toBe(2).then()
154+ })
155+
156+ test('expect.poll + catch', async () => {
157+ await expect.poll(() => 2).toBe(2).catch()
158+ })
159+
160+ test('expect.poll + finally', async () => {
161+ await expect.poll(() => 2).toBe(2).finally()
162+ })
163+ ` ,
164+ 'hang.test.js' : ts `
165+ import { expect, test } from 'vitest';
166+
167+ test('resolves + then', async () => {
168+ expect(Promise.resolve(1)).resolves.toBe(1).then()
169+ })
170+
171+ test('resolves + catch', async () => {
172+ expect(Promise.resolve(1)).resolves.toBe(1).catch()
173+ })
174+
175+ test('resolves + finally', async () => {
176+ expect(Promise.resolve(1)).resolves.toBe(1).finally()
177+ })
178+
179+ test('rejects + then', async () => {
180+ expect(Promise.reject(1)).rejects.toBe(1).then()
181+ })
182+
183+ test('rejects + catch', async () => {
184+ expect(Promise.reject(1)).rejects.toBe(1).catch()
185+ })
186+
187+ test('rejects + finally', async () => {
188+ expect(Promise.reject(1)).rejects.toBe(1).finally()
189+ })
190+
191+ test('expect.poll + then', async () => {
192+ expect.poll(() => 2).toBe(2).then()
193+ })
194+
195+ test('expect.poll + catch', async () => {
196+ expect.poll(() => 2).toBe(2).catch()
197+ })
198+
199+ test('expect.poll + finally', async () => {
200+ expect.poll(() => 2).toBe(2).finally()
201+ })
202+ ` ,
203+ } )
204+ expect ( stderr ) . toMatchInlineSnapshot ( `""` )
205+ expect ( errorTree ( ) ) . toMatchInlineSnapshot ( `
206+ {
207+ "await.test.js": {
208+ "expect.poll + catch": "passed",
209+ "expect.poll + finally": "passed",
210+ "expect.poll + then": "passed",
211+ "rejects + catch": "passed",
212+ "rejects + finally": "passed",
213+ "rejects + then": "passed",
214+ "resolves + catch": "passed",
215+ "resolves + finally": "passed",
216+ "resolves + then": "passed",
217+ },
218+ "hang.test.js": {
219+ "expect.poll + catch": "passed",
220+ "expect.poll + finally": "passed",
221+ "expect.poll + then": "passed",
222+ "rejects + catch": "passed",
223+ "rejects + finally": "passed",
224+ "rejects + then": "passed",
225+ "resolves + catch": "passed",
226+ "resolves + finally": "passed",
227+ "resolves + then": "passed",
228+ },
229+ }
230+ ` )
231+ } )
232+
120233it ( 'prints a warning if the assertion is not awaited in the browser mode' , async ( ) => {
121234 const { stderr } = await runInlineTests ( {
122235 'base.test.js' : ts `
0 commit comments