[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(typecheck): handle re-runs outside `tsc` (#8920)

authored by

Ari Perkkiö and committed by
GitHub
(Nov 3, 2025, 5:02 PM +0100) fdb2e798 6240d51a

+16 -4
+5 -1
packages/vitest/src/node/pool.ts
··· 222 222 runTests: (files, invalidates) => executeTests('run', files, invalidates), 223 223 collectTests: (files, invalidates) => executeTests('collect', files, invalidates), 224 224 async close() { 225 - await Promise.all([pool.close(), browserPool?.close?.()]) 225 + await Promise.all([ 226 + pool.close(), 227 + browserPool?.close?.(), 228 + ...ctx.projects.map(project => project.typechecker?.stop()), 229 + ]) 226 230 }, 227 231 } 228 232 }
+11 -3
packages/vitest/src/node/pools/workers/typecheckWorker.ts
··· 93 93 94 94 case 'stop': { 95 95 await runPromise 96 - await project.typechecker?.stop() 97 96 return { type: 'stopped', __vitest_worker_response__ } 98 97 } 99 98 } ··· 221 220 222 221 const files = specs.map(spec => spec.filepath) 223 222 const promise = createDefer<void>() 223 + 224 224 // check that watcher actually triggered rerun 225 - const _p = new Promise<boolean>((resolve) => { 225 + const triggered = await new Promise<boolean>((resolve) => { 226 226 const _i = setInterval(() => { 227 227 if (!project.typechecker || rerunTriggered.has(project)) { 228 228 resolve(true) ··· 234 234 clearInterval(_i) 235 235 }, 500).unref() 236 236 }) 237 - const triggered = await _p 237 + 238 + // Re-run but wasn't triggered by tsc 239 + if (promisesMap.has(project) && !triggered) { 240 + return promisesMap.get(project) 241 + } 242 + 238 243 if (project.typechecker && !triggered) { 239 244 const testFiles = project.typechecker.getTestFiles() 245 + 240 246 for (const file of testFiles) { 241 247 await vitest._testRun.enqueued(project, file) 242 248 } 249 + 243 250 await vitest._testRun.collected(project, testFiles) 244 251 await onParseEnd(project, project.typechecker.getResult()) 245 252 } 253 + 246 254 promises.push(promise) 247 255 promisesMap.set(project, promise) 248 256 promises.push(startTypechecker(project, files))