From dcef6f8b0232c73764d01d314a73433b543876ac Mon Sep 17 00:00:00 2001 From: Antoine LE TAXIN Date: Thu, 28 Dec 2023 18:47:29 +0100 Subject: [PATCH] fix(useSegment): add test and missing dep on useEffect --- .changeset/swift-cooks-reply.md | 5 ++ .../src/__tests__/SegmentProvider.test.tsx | 54 ++++++++++++++++++- packages/use-segment/src/__tests__/index.tsx | 4 ++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 .changeset/swift-cooks-reply.md diff --git a/.changeset/swift-cooks-reply.md b/.changeset/swift-cooks-reply.md new file mode 100644 index 000000000..1f9ef2cc1 --- /dev/null +++ b/.changeset/swift-cooks-reply.md @@ -0,0 +1,5 @@ +--- +'@scaleway/use-segment': patch +--- + +fix(useSegment): add test and missing dep on useEffect diff --git a/packages/use-segment/src/__tests__/SegmentProvider.test.tsx b/packages/use-segment/src/__tests__/SegmentProvider.test.tsx index e0e09ee56..23b8c05ca 100644 --- a/packages/use-segment/src/__tests__/SegmentProvider.test.tsx +++ b/packages/use-segment/src/__tests__/SegmentProvider.test.tsx @@ -1,4 +1,4 @@ -import { describe, expect, it, jest } from '@jest/globals' +import { afterAll, describe, expect, it, jest } from '@jest/globals' import type { Context } from '@segment/analytics-next' import { AnalyticsBrowser } from '@segment/analytics-next' import { render, screen, waitFor } from '@testing-library/react' @@ -8,6 +8,14 @@ import type { Analytics } from '../index' const TestChildren = () =>
children
describe('SegmentProvider', () => { + beforeEach(() => { + jest.clearAllMocks() + }) + + afterAll(() => { + jest.restoreAllMocks() + }) + it('Provider should render children when shouldRenderOnlyWhenReady is false', async () => { const mock = jest .spyOn(AnalyticsBrowser, 'load') @@ -110,4 +118,48 @@ describe('SegmentProvider', () => { expect(screen.queryByTestId('test')).toBeTruthy() }) + + it('Provider should not render children when options are not loaded at first render, but load after options changed even without settings', async () => { + const mock = jest + .spyOn(AnalyticsBrowser, 'load') + .mockResolvedValue([{} as Analytics, {} as Context]) + + const { rerender } = render( + () => Promise.resolve(), + }} + > + + , + ) + + await waitFor(() => { + expect(mock).toHaveBeenCalledTimes(0) + }) + + expect(screen.queryByTestId('test')).toBe(null) + + rerender( + () => Promise.resolve(), + }} + > + + , + ) + + await waitFor(() => { + expect(mock).toHaveBeenCalledTimes(0) + }) + + expect(screen.queryByTestId('test')).toBeTruthy() + }) }) diff --git a/packages/use-segment/src/__tests__/index.tsx b/packages/use-segment/src/__tests__/index.tsx index 972116dfc..6f9bcc7a5 100644 --- a/packages/use-segment/src/__tests__/index.tsx +++ b/packages/use-segment/src/__tests__/index.tsx @@ -68,6 +68,10 @@ const wrapper = describe('segment hook', () => { beforeEach(() => { + jest.clearAllMocks() + }) + + afterAll(() => { jest.restoreAllMocks() })