From 38a472e9bb024d1431dc2d188c75f45d34da093b Mon Sep 17 00:00:00 2001 From: Liang Xu Date: Wed, 26 Aug 2026 12:01:25 +0800 Subject: [PATCH] fix(core): match forceRerunTriggers across dot directories Fixes #11054 Signed-off-by: Liang Xu --- packages/vitest/src/node/specifications.ts | 2 +- packages/vitest/src/node/watcher.ts | 2 +- test/e2e/test/git-changed.test.ts | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/vitest/src/node/specifications.ts b/packages/vitest/src/node/specifications.ts index c8b1f9540360..588ad3c73217 100644 --- a/packages/vitest/src/node/specifications.ts +++ b/packages/vitest/src/node/specifications.ts @@ -135,7 +135,7 @@ export class VitestSpecifications { } const forceRerunTriggers = this.vitest.config.forceRerunTriggers - const matcher = forceRerunTriggers.length ? pm(forceRerunTriggers) : undefined + const matcher = forceRerunTriggers.length ? pm(forceRerunTriggers, { dot: true }) : undefined if (matcher && related.some(file => matcher(file))) { return specs } diff --git a/packages/vitest/src/node/watcher.ts b/packages/vitest/src/node/watcher.ts index 7aa99c376b28..41c2dd82dd92 100644 --- a/packages/vitest/src/node/watcher.ts +++ b/packages/vitest/src/node/watcher.ts @@ -173,7 +173,7 @@ export class VitestWatcher { return false } - if (pm.isMatch(filepath, this.vitest.config.forceRerunTriggers)) { + if (pm.isMatch(filepath, this.vitest.config.forceRerunTriggers, { dot: true })) { this.vitest.state.getFilepaths().forEach(file => this.changedTests.add(file)) return true } diff --git a/test/e2e/test/git-changed.test.ts b/test/e2e/test/git-changed.test.ts index b3ef510df88e..4db29ecf2e13 100644 --- a/test/e2e/test/git-changed.test.ts +++ b/test/e2e/test/git-changed.test.ts @@ -28,6 +28,21 @@ describe.skipIf(process.env.ECOSYSTEM_CI)('forceRerunTrigger', () => { expect(stdout).not.toContain('not-related.test.ts') }) + it('should run the whole test suite if file exists in dot-directory trigger', async () => { + const dotFileName = 'fixtures/git-changed/related/.temp/rerun.temp' + createFile(dotFileName, '') + const { stdout, stderr } = await runVitest({ + root: join(process.cwd(), 'fixtures/git-changed/related'), + include: ['related.test.ts'], + forceRerunTriggers: ['**/.temp/**'], + changed: true, + }) + expect(stderr).toBe('') + expect(stdout).toContain('1 passed') + expect(stdout).toContain('related.test.ts') + expect(stdout).not.toContain('not-related.test.ts') + }) + it('should run no tests if file does not exist', async () => { const { stdout } = await run() expect(stdout).toContain('No test files found, exiting with code 0')