1- import { describe , expect , it , jest } from '@jest/globals'
1+ import { afterAll , describe , expect , it , jest } from '@jest/globals'
22import type { Context } from '@segment/analytics-next'
33import { AnalyticsBrowser } from '@segment/analytics-next'
44import { render , screen , waitFor } from '@testing-library/react'
@@ -8,6 +8,14 @@ import type { Analytics } from '../index'
88const TestChildren = ( ) => < div data-testid = "test" > children</ div >
99
1010describe ( 'SegmentProvider' , ( ) => {
11+ beforeEach ( ( ) => {
12+ jest . clearAllMocks ( )
13+ } )
14+
15+ afterAll ( ( ) => {
16+ jest . restoreAllMocks ( )
17+ } )
18+
1119 it ( 'Provider should render children when shouldRenderOnlyWhenReady is false' , async ( ) => {
1220 const mock = jest
1321 . spyOn ( AnalyticsBrowser , 'load' )
@@ -110,4 +118,48 @@ describe('SegmentProvider', () => {
110118
111119 expect ( screen . queryByTestId ( 'test' ) ) . toBeTruthy ( )
112120 } )
121+
122+ it ( 'Provider should not render children when options are not loaded at first render, but load after options changed even without settings' , async ( ) => {
123+ const mock = jest
124+ . spyOn ( AnalyticsBrowser , 'load' )
125+ . mockResolvedValue ( [ { } as Analytics , { } as Context ] )
126+
127+ const { rerender } = render (
128+ < SegmentProvider
129+ initOptions = { { } }
130+ areOptionsLoaded = { false }
131+ shouldRenderOnlyWhenReady
132+ events = { {
133+ event : ( ) => ( ) => Promise . resolve ( ) ,
134+ } }
135+ >
136+ < TestChildren />
137+ </ SegmentProvider > ,
138+ )
139+
140+ await waitFor ( ( ) => {
141+ expect ( mock ) . toHaveBeenCalledTimes ( 0 )
142+ } )
143+
144+ expect ( screen . queryByTestId ( 'test' ) ) . toBe ( null )
145+
146+ rerender (
147+ < SegmentProvider
148+ initOptions = { { } }
149+ areOptionsLoaded
150+ shouldRenderOnlyWhenReady
151+ events = { {
152+ event : ( ) => ( ) => Promise . resolve ( ) ,
153+ } }
154+ >
155+ < TestChildren />
156+ </ SegmentProvider > ,
157+ )
158+
159+ await waitFor ( ( ) => {
160+ expect ( mock ) . toHaveBeenCalledTimes ( 0 )
161+ } )
162+
163+ expect ( screen . queryByTestId ( 'test' ) ) . toBeTruthy ( )
164+ } )
113165} )
0 commit comments