Skip to content

Commit 22116fe

Browse files
fix: set non-zero exit code when teardown throws during close (#10794)
Co-authored-by: Ari Perkkiö <ari.perkkio@gmail.com>
1 parent 3b8d525 commit 22116fe

5 files changed

Lines changed: 41 additions & 5 deletions

File tree

packages/vitest/src/node/core.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,11 +1549,18 @@ export class Vitest {
15491549
closePromises.push(...this._onClose.map(fn => fn()))
15501550

15511551
await Promise.allSettled(closePromises).then((results) => {
1552-
[...results, ...teardownErrors.map(r => ({ status: 'rejected', reason: r }))].forEach((r) => {
1553-
if (r.status === 'rejected') {
1554-
this.logger.error('error during close', r.reason)
1555-
}
1556-
})
1552+
const errors = [
1553+
...results
1554+
.filter((r): r is PromiseRejectedResult => r.status === 'rejected')
1555+
.map(r => r.reason),
1556+
...teardownErrors,
1557+
]
1558+
1559+
for (const error of errors) {
1560+
this.logger.error('error during close', error)
1561+
}
1562+
1563+
this._checkUnhandledErrors(errors)
15571564
})
15581565
await this._traces?.finish()
15591566
})()
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { expect, test } from 'vitest'
2+
3+
test('example test', () => {
4+
expect(1 + 1).toBe(2)
5+
})
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export default function () {
2+
return () => {
3+
throw new Error('teardown error')
4+
}
5+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { resolve } from 'node:path'
2+
import { defineConfig } from 'vite'
3+
4+
export default defineConfig({
5+
test: {
6+
globals: true,
7+
globalSetup: [
8+
resolve(import.meta.dirname, './globalSetup/error.ts'),
9+
],
10+
},
11+
})

test/e2e/test/global-setup.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ it('should fail', async () => {
1818
expect(stderr).toContain('globalSetup/error.ts:6:9')
1919
})
2020

21+
it('fails with a non-zero exit code when teardown throws', async () => {
22+
const root = resolve(import.meta.dirname, '../fixtures/global-setup-teardown-fail')
23+
const { stderr, exitCode } = await runVitest({ root })
24+
25+
expect(exitCode).toBe(1)
26+
expect(stderr).toContain('Error: teardown error')
27+
})
28+
2129
it('runs global setup/teardown', async () => {
2230
const { stderr, errorTree } = await runVitest({
2331
root: './fixtures/global-setup',

0 commit comments

Comments
 (0)
Sponsor
SponsoredKunjungi sekarang
Promo