From f48213fc1398a5d5d41a90c4556a41d80e298295 Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Thu, 5 Mar 2026 14:05:54 +0900 Subject: [PATCH 1/2] test(vue-query/useIsFetching): add test for outside scope warning in development mode --- .../vue-query/src/__tests__/useIsFetching.test.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/vue-query/src/__tests__/useIsFetching.test.ts b/packages/vue-query/src/__tests__/useIsFetching.test.ts index 50199934f52..b6292e0e59e 100644 --- a/packages/vue-query/src/__tests__/useIsFetching.test.ts +++ b/packages/vue-query/src/__tests__/useIsFetching.test.ts @@ -98,4 +98,17 @@ describe('useIsFetching', () => { expect(isFetching.value).toStrictEqual(1) }) + + test('should warn when used outside of setup function in development mode', () => { + vi.stubEnv('NODE_ENV', 'development') + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) + + useIsFetching() + + 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.', + ) + }) }) From 2afeaa5166ace2256d530edcc870aa896b69e1ce Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Thu, 5 Mar 2026 14:19:49 +0900 Subject: [PATCH 2/2] refactor(vue-query/useIsFetching): wrap outside scope warning test with 'try/finally' for cleanup safety --- .../src/__tests__/useIsFetching.test.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/vue-query/src/__tests__/useIsFetching.test.ts b/packages/vue-query/src/__tests__/useIsFetching.test.ts index b6292e0e59e..aa4a9339310 100644 --- a/packages/vue-query/src/__tests__/useIsFetching.test.ts +++ b/packages/vue-query/src/__tests__/useIsFetching.test.ts @@ -103,12 +103,15 @@ describe('useIsFetching', () => { vi.stubEnv('NODE_ENV', 'development') const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) - useIsFetching() - - 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 { + useIsFetching() + + 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() + } }) })