From 658d32b9823098543b743b3a0de9390e6627fc7c Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Sat, 18 Apr 2026 08:47:09 +0900 Subject: [PATCH 1/3] test(query-core/queriesObserver): add test for 'combineResult' fallback when called without raw argument (#10511) --- .../src/__tests__/queriesObserver.test.tsx | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/query-core/src/__tests__/queriesObserver.test.tsx b/packages/query-core/src/__tests__/queriesObserver.test.tsx index 004cddfcb19..901bdde4c57 100644 --- a/packages/query-core/src/__tests__/queriesObserver.test.tsx +++ b/packages/query-core/src/__tests__/queriesObserver.test.tsx @@ -586,6 +586,29 @@ describe('queriesObserver', () => { expect(combined2.total).toBe(8) }) + test('should use fallback result when combineResult is called without raw argument', () => { + const combine = vi.fn((results: Array) => ({ + count: results.length, + })) + + const key = queryKey() + const queryFn = vi.fn().mockReturnValue(1) + + const observer = new QueriesObserver<{ count: number }>( + queryClient, + [{ queryKey: key, queryFn }], + { combine }, + ) + + const [, getCombined] = observer.getOptimisticResult( + [{ queryKey: key, queryFn }], + combine, + ) + const combined = getCombined() + + expect(combined.count).toBe(1) + }) + test('should track properties on all observers when trackResult is called', () => { const key1 = queryKey() const key2 = queryKey() From cc97e9a8b794d797bdaf7f9385024498e1648580 Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Sat, 18 Apr 2026 09:07:19 +0900 Subject: [PATCH 2/3] test(query-core/queriesObserver): add test for skipping 'trackResult' when 'notifyOnChangeProps' is set (#10512) --- .../src/__tests__/queriesObserver.test.tsx | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/query-core/src/__tests__/queriesObserver.test.tsx b/packages/query-core/src/__tests__/queriesObserver.test.tsx index 901bdde4c57..aa71f92e6ba 100644 --- a/packages/query-core/src/__tests__/queriesObserver.test.tsx +++ b/packages/query-core/src/__tests__/queriesObserver.test.tsx @@ -609,6 +609,30 @@ describe('queriesObserver', () => { expect(combined.count).toBe(1) }) + test('should return observer result directly when notifyOnChangeProps is set', () => { + const key = queryKey() + const queryFn = vi.fn().mockReturnValue(1) + + const observer = new QueriesObserver(queryClient, [ + { queryKey: key, queryFn, notifyOnChangeProps: ['data'] }, + ]) + + const trackResultSpy = vi.spyOn(QueryObserver.prototype, 'trackResult') + + const [, , trackResult] = observer.getOptimisticResult( + [{ queryKey: key, queryFn, notifyOnChangeProps: ['data'] }], + undefined, + ) + + const trackedResults = trackResult() + + expect(trackedResults).toHaveLength(1) + // trackResult should NOT be called when notifyOnChangeProps is set + expect(trackResultSpy).not.toHaveBeenCalled() + + trackResultSpy.mockRestore() + }) + test('should track properties on all observers when trackResult is called', () => { const key1 = queryKey() const key2 = queryKey() From 608706ee36731a29ceb82c2ab181ac3bb9d61726 Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Sat, 18 Apr 2026 09:18:30 +0900 Subject: [PATCH 3/3] test(query-core/queriesObserver): add test for returning cached combined result when nothing has changed (#10513) --- .../src/__tests__/queriesObserver.test.tsx | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/query-core/src/__tests__/queriesObserver.test.tsx b/packages/query-core/src/__tests__/queriesObserver.test.tsx index aa71f92e6ba..686c7868c4e 100644 --- a/packages/query-core/src/__tests__/queriesObserver.test.tsx +++ b/packages/query-core/src/__tests__/queriesObserver.test.tsx @@ -633,6 +633,32 @@ describe('queriesObserver', () => { trackResultSpy.mockRestore() }) + test('should return cached combined result when nothing has changed', () => { + const combine = vi.fn((results: Array) => ({ + count: results.length, + })) + + const key = queryKey() + const queryFn = vi.fn().mockReturnValue(1) + + const queries = [{ queryKey: key, queryFn }] + + const observer = new QueriesObserver<{ count: number }>( + queryClient, + queries, + { combine }, + ) + + const [raw1, getCombined1] = observer.getOptimisticResult(queries, combine) + const combined1 = getCombined1(raw1) + + const [raw2, getCombined2] = observer.getOptimisticResult(queries, combine) + const combined2 = getCombined2(raw2) + + // Same combine, same queries → cached result returned + expect(combined1).toBe(combined2) + }) + test('should track properties on all observers when trackResult is called', () => { const key1 = queryKey() const key2 = queryKey()