@@ -267,6 +267,52 @@ test('filtering by related sources reuses the cache', async () => {
267267 delete ( globalThis as any ) . __vitest_transformed__
268268} )
269269
270+ test ( 'filtering by related sources runs setup files before every non-isolated file' , async ( ) => {
271+ const testFile = `
272+ import { expect, test } from 'vitest'
273+ import './dep.js'
274+
275+ const setupRuns = globalThis.setupRuns
276+ globalThis.testFiles = (globalThis.testFiles ?? 0) + 1
277+
278+ test('setup file ran before this file', () => {
279+ expect(setupRuns).toBe(globalThis.testFiles)
280+ })
281+ `
282+ const related = await runInlineTests (
283+ {
284+ 'vitest.config.js' : {
285+ test : {
286+ isolate : false ,
287+ setupFiles : [ './setup.js' ] ,
288+ fsModuleCache : true ,
289+ fsModuleCachePath : './node_modules/.vitest-fs-cache' ,
290+ } ,
291+ } ,
292+ 'setup.js' : `globalThis.setupRuns = (globalThis.setupRuns ?? 0) + 1` ,
293+ 'dep.js' : `export const value = 1` ,
294+ 'a.test.js' : testFile ,
295+ 'b.test.js' : testFile ,
296+ } ,
297+ { related : [ 'dep.js' ] } ,
298+ )
299+ const cached = await runVitest ( { root : related . root } )
300+
301+ for ( const run of [ related , cached ] ) {
302+ expect ( run . stderr ) . toBe ( '' )
303+ expect ( run . errorTree ( ) ) . toMatchInlineSnapshot ( `
304+ {
305+ "a.test.js": {
306+ "setup file ran before this file": "passed",
307+ },
308+ "b.test.js": {
309+ "setup file ran before this file": "passed",
310+ },
311+ }
312+ ` )
313+ }
314+ } )
315+
270316test ( 'if cache key generator bails out, the file is not cached' , async ( ) => {
271317 process . env . REPLACED = 'value1'
272318
0 commit comments