[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
test testing-tools vite
12

Configure Feed

Select the types of activity you want to include in your feed.

fix: don't call global setup teardown twice (#3188)

authored by

Vladimir and committed by
GitHub
(Apr 13, 2023, 11:15 AM +0200) ba3d1338 b81ffd90

+30 -7
+5
test/global-setup/globalSetup/another-vite-instance.ts
··· 1 1 import { createServer } from 'vite' 2 2 import { resolve } from 'pathe' 3 3 4 + let teardownHappened = false 5 + 4 6 export async function setup() { 5 7 const server = await createServer({ 6 8 root: resolve(__dirname, '..'), ··· 11 13 12 14 await server.listen(9988) 13 15 return async () => { 16 + if (teardownHappened) 17 + throw new Error('teardown called twice') 18 + teardownHappened = true 14 19 await server.close() 15 20 } 16 21 }
+5
test/global-setup/globalSetup/default-export.js
··· 2 2 return new Promise(resolve => setTimeout(resolve, n)) 3 3 } 4 4 5 + let teardownHappened = false 6 + 5 7 export default async function () { 6 8 // setup something eg start a server, db or whatever 7 9 // const server = await start() ··· 10 12 await sleep(25) 11 13 12 14 return async () => { 15 + if (teardownHappened) 16 + throw new Error('teardown called twice') 17 + teardownHappened = true 13 18 // tear it down here 14 19 // await server.close() 15 20 await sleep(25)
+5
test/global-setup/globalSetup/named-exports.js
··· 2 2 return new Promise(resolve => setTimeout(resolve, n)) 3 3 } 4 4 5 + let teardownHappened = false 6 + 5 7 // let start 6 8 7 9 export async function setup() { ··· 13 15 } 14 16 15 17 export async function teardown() { 18 + if (teardownHappened) 19 + throw new Error('teardown called twice') 20 + teardownHappened = true 16 21 // tear it down here 17 22 // await server.close() 18 23 await sleep(25)
+8 -1
test/global-setup/globalSetup/ts-with-imports.ts
··· 1 1 import { startServer } from './server' 2 2 3 + let teardown = false 4 + 3 5 export default async function () { 4 6 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 + } 6 13 }
+7 -6
packages/vitest/src/node/core.ts
··· 145 145 return coreWorkspace 146 146 } 147 147 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 152 150 } 153 151 154 152 private async resolveWorkspace(options: UserConfig, cliOptions: UserConfig) { ··· 687 685 688 686 async close() { 689 687 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()) 690 692 this.closingPromise = Promise.allSettled([ 691 693 this.pool?.close(), 692 - this.server.close(), 693 - ...this.projects.map(w => w.close()), 694 + ...closePromises, 694 695 ].filter(Boolean)).then((results) => { 695 696 results.filter(r => r.status === 'rejected').forEach((err) => { 696 697 this.logger.error('error during close', (err as PromiseRejectedResult).reason)