Skip to content

Commit 87c8f38

Browse files
authored
fix(useSegment): add test and missing dep on useEffect (#1751)
1 parent 1f1abdb commit 87c8f38

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

.changeset/swift-cooks-reply.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@scaleway/use-segment': patch
3+
---
4+
5+
fix(useSegment): add test and missing dep on useEffect

packages/use-segment/src/__tests__/SegmentProvider.test.tsx

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { describe, expect, it, jest } from '@jest/globals'
1+
import { afterAll, describe, expect, it, jest } from '@jest/globals'
22
import type { Context } from '@segment/analytics-next'
33
import { AnalyticsBrowser } from '@segment/analytics-next'
44
import { render, screen, waitFor } from '@testing-library/react'
@@ -8,6 +8,14 @@ import type { Analytics } from '../index'
88
const TestChildren = () => <div data-testid="test">children</div>
99

1010
describe('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
})

packages/use-segment/src/__tests__/index.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ const wrapper =
6868

6969
describe('segment hook', () => {
7070
beforeEach(() => {
71+
jest.clearAllMocks()
72+
})
73+
74+
afterAll(() => {
7175
jest.restoreAllMocks()
7276
})
7377

0 commit comments

Comments
 (0)