@@ -2,8 +2,15 @@ import * as React from 'react';
22import { FetchMock } from 'jest-fetch-mock' ;
33import { render , wait } from '@testing-library/react' ;
44
5- import { DataProvider , preloadData , createDataClient } from '../common' ;
6- import { useDataClient } from '../hooks' ;
5+ import {
6+ useDataClient ,
7+ withDataClient ,
8+ DataProvider ,
9+ preloadData ,
10+ createDataClient ,
11+ } from '../index' ;
12+
13+ import { DataClient } from '../common/types' ;
714
815const fetchMock = fetch as FetchMock ;
916
@@ -122,4 +129,45 @@ describe('render-as-you-fetch tests', () => {
122129
123130 expect ( errorFallback ) . toBeDefined ( ) ;
124131 } ) ;
132+
133+ it ( 'Should fallback to Suspense boundary properly, with HOC' , async ( ) => {
134+ fetchMock . mockResponse ( JSON . stringify ( { message : 'Hello world!' } ) ) ;
135+ const client = createDataClient ( ) ;
136+ const url = 'http://localhost:3000/fetch-as-you-render-hoc' ;
137+
138+ const Component = ( props : any ) => {
139+ const data = props . resource . read ( ) ;
140+
141+ return < div > { data . message } </ div > ;
142+ } ;
143+ const Wrapper = ( { client } : { client : DataClient } ) => {
144+ const resource = preloadData ( client , url ) ;
145+
146+ return (
147+ < React . Suspense fallback = { < div > Resource is not ready yet...</ div > } >
148+ < Component resource = { resource } />
149+ </ React . Suspense >
150+ ) ;
151+ } ;
152+
153+ const WrapperWithClient = withDataClient ( { name : 'client' } ) ( Wrapper ) ;
154+
155+ const App = (
156+ < DataProvider client = { client } >
157+ < WrapperWithClient />
158+ </ DataProvider >
159+ ) ;
160+
161+ const { findByText } = render ( App ) ;
162+
163+ const suspenseFallback = await findByText ( 'Resource is not ready yet...' ) ;
164+
165+ expect ( suspenseFallback ) . toBeDefined ( ) ;
166+
167+ await wait ( ) ;
168+
169+ const actualComponent = await findByText ( 'Hello world!' ) ;
170+
171+ expect ( actualComponent ) . toBeDefined ( ) ;
172+ } ) ;
125173} ) ;
0 commit comments