From 886114cdf169c0e9fd520f5879b7ad955eefc653 Mon Sep 17 00:00:00 2001 From: lovestars Date: Thu, 13 Nov 2025 11:44:09 +0400 Subject: [PATCH] fix: implement getCurrentThrowableError for InfiniteQuery --- .changeset/free-things-dream.md | 5 +++ src/infinite-query.test.ts | 57 +++++++++++++++++++++++++++++++++ src/inifinite-query.ts | 5 +++ 3 files changed, 67 insertions(+) create mode 100644 .changeset/free-things-dream.md diff --git a/.changeset/free-things-dream.md b/.changeset/free-things-dream.md new file mode 100644 index 0000000..08879df --- /dev/null +++ b/.changeset/free-things-dream.md @@ -0,0 +1,5 @@ +--- +"mobx-tanstack-query": patch +--- + +fix the start method of InfiniteQuery diff --git a/src/infinite-query.test.ts b/src/infinite-query.test.ts index 27f3198..6a368be 100644 --- a/src/infinite-query.test.ts +++ b/src/infinite-query.test.ts @@ -666,4 +666,61 @@ describe('InfiniteQuery', () => { >(); }); }); + + describe('"start" method', () => { + it('should call queryFn and fetch data', async () => { + const queryFnSpy = vi.fn(async ({ pageParam = 0 }) => { + return Array.from({ length: 3 }, (_, i) => `Item ${pageParam * 3 + i}`); + }); + + const infiniteQuery = new InfiniteQueryMock({ + queryKey: ['test'], + queryFn: queryFnSpy, + enabled: false, + initialPageParam: 0, + getNextPageParam: (_, allPages) => { + return allPages.length < 2 ? allPages.length : undefined; + }, + }); + + await infiniteQuery.start(); + + await when(() => !infiniteQuery._rawResult.isLoading); + + expect(infiniteQuery.result.isFetched).toBeTruthy(); + expect(queryFnSpy).toBeCalledTimes(1); + expect(infiniteQuery.data?.pages).toHaveLength(1); + + infiniteQuery.destroy(); + }); + + it('should throw error when throwOnError is true', async () => { + vi.useFakeTimers(); + + const infiniteQuery = new InfiniteQueryMock({ + queryKey: ['test-error'], + queryFn: async () => { + throw new Error('InfiniteQueryError'); + }, + enabled: false, + throwOnError: true, + initialPageParam: 0, + getNextPageParam: () => undefined, + }); + + let error: Error | undefined; + + const promise = infiniteQuery.start().catch((error_) => { + error = error_; + }); + + await vi.runAllTimersAsync(); + await promise; + + expect(error?.message).toBe('InfiniteQueryError'); + + infiniteQuery.destroy(); + vi.useRealTimers(); + }); + }); }); diff --git a/src/inifinite-query.ts b/src/inifinite-query.ts index 1f5fa34..9cde7e2 100644 --- a/src/inifinite-query.ts +++ b/src/inifinite-query.ts @@ -504,6 +504,11 @@ export class InfiniteQuery< return Query.prototype.createQueryHash.call(this, queryKey, options); } + protected getCurrentThrowableError(options?: RefetchOptions) { + // @ts-expect-error + return Query.prototype.getCurrentThrowableError.call(this, options); + } + setData( updater: Updater< NoInfer> | undefined,