From 12a11b41f4c07ef7a1dbbdc4d76c4509215b17d2 Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Wed, 4 Mar 2026 20:29:55 +0900 Subject: [PATCH 1/2] test(vue-query/useQuery): add test for outside scope warning in development mode --- .../vue-query/src/__tests__/useQuery.test.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/vue-query/src/__tests__/useQuery.test.ts b/packages/vue-query/src/__tests__/useQuery.test.ts index 8a77d149e5..96773f1419 100644 --- a/packages/vue-query/src/__tests__/useQuery.test.ts +++ b/packages/vue-query/src/__tests__/useQuery.test.ts @@ -460,6 +460,24 @@ describe('useQuery', () => { }) }) + describe('outside scope warning', () => { + test('should warn when used outside of setup function in development mode', () => { + vi.stubEnv('NODE_ENV', 'development') + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) + + useQuery({ + queryKey: ['outsideScope'], + queryFn: () => sleep(0).then(() => 'data'), + }) + + vi.unstubAllEnvs() + + expect(warnSpy).toHaveBeenCalledWith( + 'vue-query composable like "useQuery()" should only be used inside a "setup()" function or a running effect scope. They might otherwise lead to memory leaks.', + ) + }) + }) + describe('suspense', () => { test('should return a Promise', () => { const getCurrentInstanceSpy = getCurrentInstance as Mock From 17163570e8a76bfe7344ab343edb098971bb0bf2 Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Thu, 5 Mar 2026 14:20:52 +0900 Subject: [PATCH 2/2] refactor(vue-query/useQuery): wrap outside scope warning test with 'try/finally' for cleanup safety --- .../vue-query/src/__tests__/useQuery.test.ts | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/vue-query/src/__tests__/useQuery.test.ts b/packages/vue-query/src/__tests__/useQuery.test.ts index 96773f1419..5309510930 100644 --- a/packages/vue-query/src/__tests__/useQuery.test.ts +++ b/packages/vue-query/src/__tests__/useQuery.test.ts @@ -465,16 +465,19 @@ describe('useQuery', () => { vi.stubEnv('NODE_ENV', 'development') const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) - useQuery({ - queryKey: ['outsideScope'], - queryFn: () => sleep(0).then(() => 'data'), - }) - - vi.unstubAllEnvs() - - expect(warnSpy).toHaveBeenCalledWith( - 'vue-query composable like "useQuery()" should only be used inside a "setup()" function or a running effect scope. They might otherwise lead to memory leaks.', - ) + try { + useQuery({ + queryKey: ['outsideScope'], + queryFn: () => sleep(0).then(() => 'data'), + }) + + expect(warnSpy).toHaveBeenCalledWith( + 'vue-query composable like "useQuery()" should only be used inside a "setup()" function or a running effect scope. They might otherwise lead to memory leaks.', + ) + } finally { + warnSpy.mockRestore() + vi.unstubAllEnvs() + } }) })