diff --git a/examples/app-vitest-full/tests/nuxt/auto-import.spec.ts b/examples/app-vitest-full/tests/nuxt/auto-import.spec.ts index 4ddccdefe..c6a12a0c9 100644 --- a/examples/app-vitest-full/tests/nuxt/auto-import.spec.ts +++ b/examples/app-vitest-full/tests/nuxt/auto-import.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest' +import { describe, expect, it, vi } from 'vitest' describe('auto-imports', () => { it('can use core nuxt composables within test file', () => { @@ -17,4 +17,17 @@ describe('auto-imports', () => { expect(useAutoImportedTarget()).toMatchInlineSnapshot('"the original"') expect(useAutoImportedNonTarget()).toMatchInlineSnapshot('"the original"') }) + + it('setInterval is not auto-imported', () => { + vi.useFakeTimers() + + let triggerd = false + setInterval(() => { + triggerd = true + }, 1000) + + vi.advanceTimersByTime(1000) + + expect(triggerd).toBe(true) + }) }) diff --git a/src/module/mock.ts b/src/module/mock.ts index 1ebcd0880..166608559 100644 --- a/src/module/mock.ts +++ b/src/module/mock.ts @@ -28,6 +28,14 @@ export function setupImportMocking() { ctx.components = _ }) + nuxt.hook('imports:sources', (presets) => { + // because the native setInterval cannot be mocked + const idx = presets.findIndex(p => p.imports.includes('setInterval')) + if (idx !== -1) { + presets.splice(idx, 1) + } + }) + // We want to run Nuxt plugins on test files nuxt.options.ignore = nuxt.options.ignore.filter(i => i !== '**/*.{spec,test}.{js,cts,mts,ts,jsx,tsx}') if (nuxt._ignore) {