diff --git a/packages/vitest/src/runtime/entry.ts b/packages/vitest/src/runtime/entry.ts index 97cc6efd7061..2b129796b926 100644 --- a/packages/vitest/src/runtime/entry.ts +++ b/packages/vitest/src/runtime/entry.ts @@ -144,6 +144,8 @@ export async function run(files: string[], config: ResolvedConfig, executor: Vit // reset after tests, because user might call `vi.setConfig` in setupFile vi.resetConfig() + // mocks should not affect different files + vi.restoreAllMocks() } }) } diff --git a/test/single-thread/package.json b/test/single-thread/package.json index 25ceb3cbedee..efc8e44b26a0 100644 --- a/test/single-thread/package.json +++ b/test/single-thread/package.json @@ -1,5 +1,6 @@ { "name": "@vitest/test-single-thread", + "type": "module", "private": true, "scripts": { "test": "vitest", diff --git a/test/single-thread/test/a.test.ts b/test/single-thread/test/a.test.ts index 52a107225e3d..3324f2317d15 100644 --- a/test/single-thread/test/a.test.ts +++ b/test/single-thread/test/a.test.ts @@ -1,4 +1,11 @@ -import { it } from 'vitest' +import fs from 'node:fs' +import { expect, it, vi } from 'vitest' import { timeout } from './timeout' +// this file is running first, it should not affect file "b.test.ts" +it('mock is mocked', () => { + vi.spyOn(fs, 'readFileSync').mockReturnValue('mocked') + expect(fs.readFileSync('')).toBe('mocked') +}) + it('timeout', () => new Promise(resolve => setTimeout(resolve, timeout))) diff --git a/test/single-thread/test/b.test.ts b/test/single-thread/test/b.test.ts index 52a107225e3d..e4b82b89bae0 100644 --- a/test/single-thread/test/b.test.ts +++ b/test/single-thread/test/b.test.ts @@ -1,4 +1,18 @@ -import { it } from 'vitest' +import fs from 'node:fs' +import { fileURLToPath } from 'node:url' +import { dirname, resolve } from 'pathe' +import { expect, it } from 'vitest' import { timeout } from './timeout' +// this file is running second, it should not be affected by mock in "a.test.ts" +it('mock is mocked', () => { + expect(fs.readFileSync(resolve(dirname(fileURLToPath(import.meta.url)), './timeout.ts'), 'utf-8')).toMatchInlineSnapshot(` + "export const timeout = 200 + export const mockedFn = function () { + return 'original' + } + " + `) +}) + it('timeout', () => new Promise(resolve => setTimeout(resolve, timeout))) diff --git a/test/single-thread/test/timeout.ts b/test/single-thread/test/timeout.ts index 67d0ace7f66c..980598ac3d05 100644 --- a/test/single-thread/test/timeout.ts +++ b/test/single-thread/test/timeout.ts @@ -1 +1,4 @@ export const timeout = 200 +export const mockedFn = function () { + return 'original' +} diff --git a/test/single-thread/vitest.config.ts b/test/single-thread/vitest.config.ts index c345a582e6fa..686b625d344b 100644 --- a/test/single-thread/vitest.config.ts +++ b/test/single-thread/vitest.config.ts @@ -1,7 +1,15 @@ import { defineConfig } from 'vite' +import { BaseSequencer } from 'vitest/node' export default defineConfig({ test: { threads: false, + sequence: { + sequencer: class Sequences extends BaseSequencer { + public async sort(files: string[]): Promise { + return files.sort() + } + }, + }, }, })