Skip to content

Commit 26fe358

Browse files
authored
Merge pull request #61 from verylovestars/fix-infinite-query-start
fix: implement getCurrentThrowableError for InfiniteQuery
2 parents 071dda0 + 886114c commit 26fe358

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

.changeset/free-things-dream.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"mobx-tanstack-query": patch
3+
---
4+
5+
fix the start method of InfiniteQuery

src/infinite-query.test.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,4 +666,61 @@ describe('InfiniteQuery', () => {
666666
>();
667667
});
668668
});
669+
670+
describe('"start" method', () => {
671+
it('should call queryFn and fetch data', async () => {
672+
const queryFnSpy = vi.fn(async ({ pageParam = 0 }) => {
673+
return Array.from({ length: 3 }, (_, i) => `Item ${pageParam * 3 + i}`);
674+
});
675+
676+
const infiniteQuery = new InfiniteQueryMock({
677+
queryKey: ['test'],
678+
queryFn: queryFnSpy,
679+
enabled: false,
680+
initialPageParam: 0,
681+
getNextPageParam: (_, allPages) => {
682+
return allPages.length < 2 ? allPages.length : undefined;
683+
},
684+
});
685+
686+
await infiniteQuery.start();
687+
688+
await when(() => !infiniteQuery._rawResult.isLoading);
689+
690+
expect(infiniteQuery.result.isFetched).toBeTruthy();
691+
expect(queryFnSpy).toBeCalledTimes(1);
692+
expect(infiniteQuery.data?.pages).toHaveLength(1);
693+
694+
infiniteQuery.destroy();
695+
});
696+
697+
it('should throw error when throwOnError is true', async () => {
698+
vi.useFakeTimers();
699+
700+
const infiniteQuery = new InfiniteQueryMock({
701+
queryKey: ['test-error'],
702+
queryFn: async () => {
703+
throw new Error('InfiniteQueryError');
704+
},
705+
enabled: false,
706+
throwOnError: true,
707+
initialPageParam: 0,
708+
getNextPageParam: () => undefined,
709+
});
710+
711+
let error: Error | undefined;
712+
713+
const promise = infiniteQuery.start().catch((error_) => {
714+
error = error_;
715+
});
716+
717+
await vi.runAllTimersAsync();
718+
await promise;
719+
720+
expect(error?.message).toBe('InfiniteQueryError');
721+
722+
infiniteQuery.destroy();
723+
vi.useRealTimers();
724+
});
725+
});
669726
});

src/inifinite-query.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,11 @@ export class InfiniteQuery<
504504
return Query.prototype.createQueryHash.call(this, queryKey, options);
505505
}
506506

507+
protected getCurrentThrowableError(options?: RefetchOptions) {
508+
// @ts-expect-error
509+
return Query.prototype.getCurrentThrowableError.call(this, options);
510+
}
511+
507512
setData(
508513
updater: Updater<
509514
NoInfer<InfiniteData<TQueryFnData, TPageParam>> | undefined,

0 commit comments

Comments
 (0)