From f295b5c9253e01a847cad55d09bf4e703ad07425 Mon Sep 17 00:00:00 2001 From: Jerel Miller Date: Mon, 4 Dec 2023 18:43:43 -0700 Subject: [PATCH] Add test to ensure errorPolicy: 'all' works as expected --- .../__tests__/createQueryPreloader.test.tsx | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/src/react/query-preloader/__tests__/createQueryPreloader.test.tsx b/src/react/query-preloader/__tests__/createQueryPreloader.test.tsx index 613581fdba6..362fb9db9ed 100644 --- a/src/react/query-preloader/__tests__/createQueryPreloader.test.tsx +++ b/src/react/query-preloader/__tests__/createQueryPreloader.test.tsx @@ -393,6 +393,70 @@ test("throws when error is returned", async () => { dispose(); }); +test("returns error when error policy is 'all'", async () => { + // Disable error messages shown by React when an error is thrown to an error + // boundary + using _consoleSpy = spyOnConsole("error"); + const { query } = useSimpleCase(); + const mocks = [ + { request: { query }, result: { errors: [new GraphQLError("Oops")] } }, + ]; + const client = createDefaultClient(mocks); + const Profiler = createProfiler({ + initialSnapshot: { + result: null as UseReadQueryResult | null, + error: null as Error | null, + }, + }); + + const preloadQuery = createQueryPreloader(client); + const [queryRef, dispose] = preloadQuery(query, { errorPolicy: "all" }); + + const { SuspenseFallback, ReadQueryHook } = createDefaultProfiledComponents( + Profiler, + queryRef + ); + + function ErrorFallback({ error }: { error: Error }) { + useTrackRenders(); + Profiler.mergeSnapshot({ error }); + + return null; + } + + function App() { + return ( + + }> + + + + ); + } + + renderWithClient(, { client, wrapper: Profiler }); + + { + const { renderedComponents } = await Profiler.takeRender(); + + expect(renderedComponents).toStrictEqual([SuspenseFallback]); + } + + { + const { snapshot, renderedComponents } = await Profiler.takeRender(); + + expect(renderedComponents).toStrictEqual([ReadQueryHook]); + expect(snapshot.result).toEqual({ + data: undefined, + error: new ApolloError({ graphQLErrors: [new GraphQLError("Oops")] }), + networkStatus: NetworkStatus.error, + }); + expect(snapshot.error).toEqual(null); + } + + dispose(); +}); + test("passes context to the link", async () => { interface QueryData { context: Record;