From d6ef0da11f7f977daa4be1324d3208822e01ce1d Mon Sep 17 00:00:00 2001 From: Matej Vobornik Date: Wed, 28 May 2025 15:57:30 +0200 Subject: [PATCH] fix(cache): preserve test results from previous runs (#8043) --- packages/vitest/src/node/cache/results.ts | 3 ++- test/config/fixtures/cache/second.test.ts | 5 +++++ test/config/test/cache.test.ts | 26 +++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 test/config/fixtures/cache/second.test.ts diff --git a/packages/vitest/src/node/cache/results.ts b/packages/vitest/src/node/cache/results.ts index dc612cf49..5b987c8ca 100644 --- a/packages/vitest/src/node/cache/results.ts +++ b/packages/vitest/src/node/cache/results.ts @@ -45,8 +45,9 @@ export class ResultsCache { const resultsCache = await fs.promises.readFile(this.cachePath, 'utf8') const { results, version } = JSON.parse(resultsCache || '[]') + const [major, minor] = version.split('.') // handling changed in 0.30.0 - if (Number(version.split('.')[1]) >= 30) { + if (major > 0 || Number(minor) >= 30) { this.cache = new Map(results) this.version = version results.forEach(([spec]: [string]) => { diff --git a/test/config/fixtures/cache/second.test.ts b/test/config/fixtures/cache/second.test.ts new file mode 100644 index 000000000..36c7cc207 --- /dev/null +++ b/test/config/fixtures/cache/second.test.ts @@ -0,0 +1,5 @@ +import { expect, test } from "vitest"; + +test('', () => { + expect(true).toBe(true) +}) diff --git a/test/config/test/cache.test.ts b/test/config/test/cache.test.ts index d2e4ff758..386e28408 100644 --- a/test/config/test/cache.test.ts +++ b/test/config/test/cache.test.ts @@ -1,3 +1,4 @@ +import { readFileSync } from 'node:fs' import { resolve } from 'pathe' import { describe, expect, test } from 'vitest' import { runVitest } from '../../test-utils' @@ -57,6 +58,31 @@ test('use cacheDir', async () => { expect(cachePath).toMatch(path) }) +test('preserves previous test results', async () => { + const firstRun = await runVitest({ + root, + include: ['basic.test.ts'], + }) + + expect(firstRun.stdout).toContain('✓ basic.test.ts >') + expect(firstRun.stderr).toBe('') + + const cachePath = firstRun.ctx!.cache.results.getCachePath() + const firstRunCacheContent = readFileSync(cachePath!, 'utf-8') + expect(firstRunCacheContent).toContain('basic.test.ts') + + const secondRun = await runVitest({ + root, + include: ['second.test.ts'], + }) + expect(secondRun.stdout).toContain('✓ second.test.ts >') + expect(secondRun.stderr).toBe('') + + const secondRunCacheContent = readFileSync(cachePath!, 'utf-8') + expect(secondRunCacheContent).toContain('basic.test.ts') + expect(secondRunCacheContent).toContain('second.test.ts') +}) + describe('with optimizer enabled', () => { const deps = { optimizer: { -- 2.51.2