Skip to content

Commit ba3d133

Browse files
authoredApr 13, 2023
fix: don't call global setup teardown twice (#3188)
1 parent b81ffd9 commit ba3d133

File tree

5 files changed

+30
-7
lines changed

5 files changed

+30
-7
lines changed
 

‎packages/vitest/src/node/core.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,8 @@ export class Vitest {
145145
return coreWorkspace
146146
}
147147

148-
public getCoreWorkspaceProject() {
149-
if (!this.coreWorkspace)
150-
throw new Error('Core workspace project is not initialized')
151-
return this.coreWorkspace
148+
public getCoreWorkspaceProject(): WorkspaceProject | null {
149+
return this.coreWorkspace || null
152150
}
153151

154152
private async resolveWorkspace(options: UserConfig, cliOptions: UserConfig) {
@@ -687,10 +685,13 @@ export class Vitest {
687685

688686
async close() {
689687
if (!this.closingPromise) {
688+
const closePromises = this.projects.map(w => w.close())
689+
// close the core workspace server only once
690+
if (this.coreWorkspace && !this.projects.includes(this.coreWorkspace))
691+
closePromises.push(this.server.close())
690692
this.closingPromise = Promise.allSettled([
691693
this.pool?.close(),
692-
this.server.close(),
693-
...this.projects.map(w => w.close()),
694+
...closePromises,
694695
].filter(Boolean)).then((results) => {
695696
results.filter(r => r.status === 'rejected').forEach((err) => {
696697
this.logger.error('error during close', (err as PromiseRejectedResult).reason)

‎test/global-setup/globalSetup/another-vite-instance.ts

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { createServer } from 'vite'
22
import { resolve } from 'pathe'
33

4+
let teardownHappened = false
5+
46
export async function setup() {
57
const server = await createServer({
68
root: resolve(__dirname, '..'),
@@ -11,6 +13,9 @@ export async function setup() {
1113

1214
await server.listen(9988)
1315
return async () => {
16+
if (teardownHappened)
17+
throw new Error('teardown called twice')
18+
teardownHappened = true
1419
await server.close()
1520
}
1621
}

‎test/global-setup/globalSetup/default-export.js

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ async function sleep(n) {
22
return new Promise(resolve => setTimeout(resolve, n))
33
}
44

5+
let teardownHappened = false
6+
57
export default async function () {
68
// setup something eg start a server, db or whatever
79
// const server = await start()
@@ -10,6 +12,9 @@ export default async function () {
1012
await sleep(25)
1113

1214
return async () => {
15+
if (teardownHappened)
16+
throw new Error('teardown called twice')
17+
teardownHappened = true
1318
// tear it down here
1419
// await server.close()
1520
await sleep(25)

‎test/global-setup/globalSetup/named-exports.js

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ async function sleep(n) {
22
return new Promise(resolve => setTimeout(resolve, n))
33
}
44

5+
let teardownHappened = false
6+
57
// let start
68

79
export async function setup() {
@@ -13,6 +15,9 @@ export async function setup() {
1315
}
1416

1517
export async function teardown() {
18+
if (teardownHappened)
19+
throw new Error('teardown called twice')
20+
teardownHappened = true
1621
// tear it down here
1722
// await server.close()
1823
await sleep(25)
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import { startServer } from './server'
22

3+
let teardown = false
4+
35
export default async function () {
46
const server = await startServer('0.0.0.0', 9876)
5-
return async () => new Promise<void>(resolve => server.close(() => resolve()))
7+
return async () => {
8+
if (teardown)
9+
throw new Error('teardown called twice')
10+
teardown = true
11+
return new Promise<void>(resolve => server.close(() => resolve()))
12+
}
613
}

0 commit comments

Comments
 (0)
Please sign in to comment.