diff --git a/package.json b/package.json
index 8704739e1..927490776 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,6 @@
"@rollup/plugin-node-resolve": "13.3.0",
"@testing-library/jest-dom": "5.16.4",
"@testing-library/react": "13.3.0",
- "@testing-library/react-hooks": "8.0.0",
"@types/jest": "28.1.1",
"@types/node": "17.0.31",
"@types/prop-types": "15.7.5",
diff --git a/packages/use-gtm/src/__tests__/index.tsx b/packages/use-gtm/src/__tests__/index.tsx
index 6bca970fb..daf1b4d0d 100644
--- a/packages/use-gtm/src/__tests__/index.tsx
+++ b/packages/use-gtm/src/__tests__/index.tsx
@@ -1,5 +1,4 @@
-import { fireEvent } from '@testing-library/react'
-import { renderHook } from '@testing-library/react-hooks'
+import { fireEvent, renderHook } from '@testing-library/react'
import mockdate from 'mockdate'
import { ReactNode } from 'react'
import GTMProvider, { SendGTM, useGTM } from '..'
@@ -48,10 +47,18 @@ describe('GTM hook', () => {
})
it('useGTM should not be defined without GTMProvider', () => {
- const { result } = renderHook(() => useGTM())
- expect(() => {
- expect(result.current).toBe(undefined)
- }).toThrow(Error('useGTM must be used within a GTMProvider'))
+ const orignalConsoleError = console.error
+ console.error = jest.fn
+
+ try {
+ renderHook(() => useGTM())
+ } catch (error) {
+ expect((error as Error)?.message).toBe(
+ 'useGTM must be used within a GTMProvider',
+ )
+ }
+
+ console.error = orignalConsoleError
})
it('Provider should call onLoadError if script fail to load', () => {
diff --git a/packages/use-i18n/src/__tests__/usei18n.tsx b/packages/use-i18n/src/__tests__/usei18n.tsx
index 14c140fad..8da9de890 100644
--- a/packages/use-i18n/src/__tests__/usei18n.tsx
+++ b/packages/use-i18n/src/__tests__/usei18n.tsx
@@ -1,4 +1,4 @@
-import { act, renderHook } from '@testing-library/react-hooks'
+import { act, renderHook, waitFor } from '@testing-library/react'
import mockdate from 'mockdate'
import { ReactNode } from 'react'
import I18n, { useI18n, useTranslation } from '..'
@@ -45,45 +45,70 @@ describe('i18n hook', () => {
})
it('useTranslation should not be defined without I18nProvider', () => {
- const { result } = renderHook(() => useTranslation(), {
- wrapper: ({ children }: { children: ReactNode }) =>
{children}
,
- })
- expect(() => {
- expect(result.current).toBe(undefined)
- }).toThrow(Error('useTranslation must be used within a I18nProvider'))
+ const orignalConsoleError = console.error
+ console.error = jest.fn
+
+ try {
+ renderHook(() => useTranslation(), {
+ wrapper: ({ children }: { children: ReactNode }) => (
+ {children}
+ ),
+ })
+ } catch (error) {
+ expect((error as Error)?.message).toBe(
+ 'useTranslation must be used within a I18nProvider',
+ )
+ }
+
+ console.error = orignalConsoleError
})
it('useI18n should not be defined without I18nProvider', () => {
- const { result } = renderHook(() => useI18n(), {
- wrapper: ({ children }: { children: ReactNode }) => {children}
,
- })
- expect(() => {
- expect(result.current).toBe(undefined)
- }).toThrow(Error('useI18n must be used within a I18nProvider'))
+ const orignalConsoleError = console.error
+ console.error = jest.fn
+
+ try {
+ renderHook(() => useI18n(), {
+ wrapper: ({ children }: { children: ReactNode }) => (
+ {children}
+ ),
+ })
+ } catch (error) {
+ expect((error as Error)?.message).toBe(
+ 'useI18n must be used within a I18nProvider',
+ )
+ }
+
+ console.error = orignalConsoleError
})
it('should use defaultLoad, useTranslation, switch local and translate', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useTranslation([]), {
+ const { result } = renderHook(() => useTranslation([]), {
wrapper: wrapper({ defaultLocale: 'en' }),
})
// first render there is no load
expect(result.current.t('title')).toEqual('')
- // after load of en locale
- await waitForNextUpdate()
- expect(result.current.t('title')).toEqual(en.title)
+
+ await waitFor(() => {
+ // after load of en locale
+ expect(result.current.t('title')).toEqual(en.title)
+ })
+
act(() => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
- expect(result.current.t('title')).toEqual(fr.title)
+ await waitFor(() => {
+ expect(result.current.t('title')).toEqual(fr.title)
+ })
act(() => {
result.current.switchLocale('es')
})
- await waitForNextUpdate()
- expect(result.current.t('title')).toEqual(es.title)
+ await waitFor(() => {
+ expect(result.current.t('title')).toEqual(es.title)
+ })
})
it('should use specific load on useTranslation', async () => {
@@ -95,7 +120,7 @@ describe('i18n hook', () => {
namespace: string
}) => import(`./locales/namespaces/${locale}/${namespace}.json`)
- const { result, waitForNextUpdate } = renderHook(
+ const { result } = renderHook(
() => useTranslation(['user', 'profile'], load),
{
wrapper: wrapper({
@@ -104,16 +129,17 @@ describe('i18n hook', () => {
}),
},
)
- // await load of locales
- await waitForNextUpdate()
- expect(result.current.translations).toStrictEqual({
- en: {
- 'profile.lastName': 'Last Name',
- 'profile.name': 'Name',
- 'user.languages': 'Languages',
- 'user.lastName': 'Last Name',
- 'user.name': 'Name',
- },
+
+ await waitFor(() => {
+ expect(result.current.translations).toStrictEqual({
+ en: {
+ 'profile.lastName': 'Last Name',
+ 'profile.name': 'Name',
+ 'user.languages': 'Languages',
+ 'user.lastName': 'Last Name',
+ 'user.name': 'Name',
+ },
+ })
})
expect(result.current.t('user.name')).toEqual('Name')
@@ -124,22 +150,22 @@ describe('i18n hook', () => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
-
- expect(result.current.translations).toStrictEqual({
- en: {
- 'profile.lastName': 'Last Name',
- 'profile.name': 'Name',
- 'user.languages': 'Languages',
- 'user.lastName': 'Last Name',
- 'user.name': 'Name',
- },
- fr: {
- 'profile.lastName': 'Nom',
- 'profile.name': 'Prénom',
- 'user.lastName': 'Nom',
- 'user.name': 'Prénom',
- },
+ await waitFor(() => {
+ expect(result.current.translations).toStrictEqual({
+ en: {
+ 'profile.lastName': 'Last Name',
+ 'profile.name': 'Name',
+ 'user.languages': 'Languages',
+ 'user.lastName': 'Last Name',
+ 'user.name': 'Name',
+ },
+ fr: {
+ 'profile.lastName': 'Nom',
+ 'profile.name': 'Prénom',
+ 'user.lastName': 'Nom',
+ 'user.name': 'Prénom',
+ },
+ })
})
expect(result.current.t('user.name')).toEqual('Prénom')
@@ -159,39 +185,37 @@ describe('i18n hook', () => {
namespace: string
}) => import(`./locales/namespaces/${locale}/${namespace}.json`)
- const { result, waitForNextUpdate } = renderHook(
- () => useTranslation(['user'], load),
- {
- wrapper: wrapper({
- defaultLocale: 'fr',
- enableDefaultLocale: true,
- supportedLocales: ['en', 'fr'],
- }),
- },
- )
+ const { result } = renderHook(() => useTranslation(['user'], load), {
+ wrapper: wrapper({
+ defaultLocale: 'fr',
+ enableDefaultLocale: true,
+ supportedLocales: ['en', 'fr'],
+ }),
+ })
// current local will be 'en' based on navigator
// await load of locales
act(() => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
- expect(result.current.translations).toStrictEqual({
- en: {
- 'user.languages': 'Languages',
- 'user.lastName': 'Last Name',
- 'user.name': 'Name',
- },
- fr: {
- 'user.lastName': 'Nom',
- 'user.name': 'Prénom',
- },
- })
+ await waitFor(() => {
+ expect(result.current.translations).toStrictEqual({
+ en: {
+ 'user.languages': 'Languages',
+ 'user.lastName': 'Last Name',
+ 'user.name': 'Name',
+ },
+ fr: {
+ 'user.lastName': 'Nom',
+ 'user.name': 'Prénom',
+ },
+ })
- expect(result.current.t('user.languages')).toEqual('')
- expect(result.current.t('user.lastName')).toEqual('Nom')
- expect(result.current.t('user.name')).toEqual('Prénom')
+ expect(result.current.t('user.languages')).toEqual('')
+ expect(result.current.t('user.lastName')).toEqual('Nom')
+ expect(result.current.t('user.name')).toEqual('Prénom')
+ })
})
it('should set current locale from navigator languages', async () => {
@@ -202,14 +226,16 @@ describe('i18n hook', () => {
languages: ['en-US', 'en'],
} as unknown as Navigator),
)
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'fr',
supportedLocales: ['en', 'fr', 'es'],
}),
})
- await waitForNextUpdate()
- expect(result.current.currentLocale).toEqual('en')
+
+ await waitFor(() => {
+ expect(result.current.currentLocale).toEqual('en')
+ })
})
it('should set current locale from navigator language', async () => {
@@ -220,18 +246,20 @@ describe('i18n hook', () => {
languages: undefined,
} as unknown as Navigator),
)
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'fr',
supportedLocales: ['en', 'fr', 'es'],
}),
})
- await waitForNextUpdate()
- expect(result.current.currentLocale).toEqual('en')
+
+ await waitFor(() => {
+ expect(result.current.currentLocale).toEqual('en')
+ })
})
it('should switch locale', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'en',
supportedLocales: ['en', 'fr', 'es'],
@@ -243,18 +271,20 @@ describe('i18n hook', () => {
act(() => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
- expect(result.current.currentLocale).toEqual('fr')
- expect(localStorage.getItem(LOCALE_ITEM_STORAGE)).toBe('fr')
+ await waitFor(() => {
+ expect(result.current.currentLocale).toEqual('fr')
+ expect(localStorage.getItem(LOCALE_ITEM_STORAGE)).toBe('fr')
+ })
act(() => {
result.current.switchLocale('es')
})
- await waitForNextUpdate()
- expect(result.current.currentLocale).toEqual('es')
- expect(localStorage.getItem(LOCALE_ITEM_STORAGE)).toBe('es')
+ await waitFor(() => {
+ expect(result.current.currentLocale).toEqual('es')
+ expect(localStorage.getItem(LOCALE_ITEM_STORAGE)).toBe('es')
+ })
act(() => {
result.current.switchLocale('test')
@@ -264,7 +294,7 @@ describe('i18n hook', () => {
})
it('should translate correctly with enableDebugKey', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'en',
defaultTranslations: { en },
@@ -273,31 +303,33 @@ describe('i18n hook', () => {
}),
})
expect(result.current.t('test')).toEqual('test')
- await waitForNextUpdate()
- expect(result.current.t('title')).toEqual(en.title)
- expect(result.current.t('subtitle')).toEqual(en.subtitle)
- expect(result.current.t('plurals', { numPhotos: 0 })).toEqual(
- 'You have no photos.',
- )
- expect(result.current.t('plurals', { numPhotos: 1 })).toEqual(
- 'You have one photo.',
- )
- expect(result.current.t('plurals', { numPhotos: 2 })).toEqual(
- 'You have 2 photos.',
- )
+ await waitFor(() => {
+ expect(result.current.t('title')).toEqual(en.title)
+ expect(result.current.t('subtitle')).toEqual(en.subtitle)
+ expect(result.current.t('plurals', { numPhotos: 0 })).toEqual(
+ 'You have no photos.',
+ )
+ expect(result.current.t('plurals', { numPhotos: 1 })).toEqual(
+ 'You have one photo.',
+ )
+ expect(result.current.t('plurals', { numPhotos: 2 })).toEqual(
+ 'You have 2 photos.',
+ )
+ })
})
it('should use namespaceTranslation', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'en',
defaultTranslations: { en },
}),
})
- await waitForNextUpdate()
- const identiqueTranslate = result.current.namespaceTranslation('')
- expect(identiqueTranslate('title')).toEqual(result.current.t('title'))
+ await waitFor(() => {
+ const identiqueTranslate = result.current.namespaceTranslation('')
+ expect(identiqueTranslate('title')).toEqual(result.current.t('title'))
+ })
const translate = result.current.namespaceTranslation('tests.test')
expect(translate('namespaces')).toEqual('test')
@@ -309,7 +341,7 @@ describe('i18n hook', () => {
})
it('should use formatNumber', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'en',
}),
@@ -334,17 +366,18 @@ describe('i18n hook', () => {
act(() => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
// https://stackoverflow.com/questions/58769806/identical-strings-not-matching-in-jest
// https://stackoverflow.com/questions/54242039/intl-numberformat-space-character-does-not-match
- expect(
- result.current.formatNumber(2, {
- currency: 'EUR',
- style: 'currency',
- }),
- ).toEqual('2,00\xa0€')
+ await waitFor(() => {
+ expect(
+ result.current.formatNumber(2, {
+ currency: 'EUR',
+ style: 'currency',
+ }),
+ ).toEqual('2,00\xa0€')
+ })
expect(
result.current.formatNumber(2, { currency: 'USD', style: 'currency' }),
@@ -352,7 +385,7 @@ describe('i18n hook', () => {
})
it('should use formatList', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'en',
}),
@@ -384,14 +417,14 @@ describe('i18n hook', () => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
-
- expect(
- result.current.formatList(vehicles, {
- style: 'long',
- type: 'conjunction',
- }),
- ).toEqual('Motorcycle, Bus et Car')
+ await waitFor(() => {
+ expect(
+ result.current.formatList(vehicles, {
+ style: 'long',
+ type: 'conjunction',
+ }),
+ ).toEqual('Motorcycle, Bus et Car')
+ })
expect(
result.current.formatList(vehicles, {
@@ -409,15 +442,16 @@ describe('i18n hook', () => {
})
it('should use datetime', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'en',
}),
})
- await waitForNextUpdate()
const date = new Date('December 17, 1995 03:24:00')
- expect(result.current.datetime(date)).toEqual('12/17/1995')
+ await waitFor(() => {
+ expect(result.current.datetime(date)).toEqual('12/17/1995')
+ })
expect(
result.current.datetime(date, {
@@ -456,9 +490,10 @@ describe('i18n hook', () => {
act(() => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
- expect(result.current.datetime(date)).toEqual('17/12/1995')
+ await waitFor(() => {
+ expect(result.current.datetime(date)).toEqual('17/12/1995')
+ })
expect(
result.current.datetime(date, {
@@ -479,7 +514,7 @@ describe('i18n hook', () => {
})
it('should relativeTime', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'en',
}),
@@ -492,13 +527,14 @@ describe('i18n hook', () => {
act(() => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
- expect(result.current.relativeTime(date)).toEqual('il y a plus de 20 ans')
+ await waitFor(() => {
+ expect(result.current.relativeTime(date)).toEqual('il y a plus de 20 ans')
+ })
})
it('should relativeTimeStrict', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'en',
}),
@@ -510,13 +546,16 @@ describe('i18n hook', () => {
act(() => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
- expect(result.current.relativeTimeStrict(date)).toEqual('il y a 3499 jours')
+ await waitFor(() => {
+ expect(result.current.relativeTimeStrict(date)).toEqual(
+ 'il y a 3499 jours',
+ )
+ })
})
it('should formatUnit', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'en',
}),
@@ -528,15 +567,16 @@ describe('i18n hook', () => {
act(() => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
- expect(
- result.current.formatUnit(12, { short: false, unit: 'byte' }),
- ).toEqual('12 octets')
+ await waitFor(() => {
+ expect(
+ result.current.formatUnit(12, { short: false, unit: 'byte' }),
+ ).toEqual('12 octets')
+ })
})
it('should formatDate', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'en',
}),
@@ -548,23 +588,25 @@ describe('i18n hook', () => {
act(() => {
result.current.switchLocale('fr')
})
- await waitForNextUpdate()
- expect(
- result.current.formatDate(new Date(2020, 1, 13, 16, 28), 'numericHour'),
- ).toEqual('2020-02-13 16:28')
+ await waitFor(() => {
+ expect(
+ result.current.formatDate(new Date(2020, 1, 13, 16, 28), 'numericHour'),
+ ).toEqual('2020-02-13 16:28')
+ })
})
it('should load default datefns locales', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useI18n(), {
+ const { result } = renderHook(() => useI18n(), {
wrapper: wrapper({
defaultLocale: 'test',
supportedLocales: ['test'],
}),
})
expect(result.current.dateFnsLocale).toBe(undefined)
- await waitForNextUpdate()
- expect(result.current.dateFnsLocale?.code).toEqual('en-GB')
+ await waitFor(() => {
+ expect(result.current.dateFnsLocale?.code).toEqual('en-GB')
+ })
})
})
diff --git a/packages/use-media/src/__tests__/useMedia.tsx b/packages/use-media/src/__tests__/useMedia.tsx
index c6adae355..4b608c05c 100644
--- a/packages/use-media/src/__tests__/useMedia.tsx
+++ b/packages/use-media/src/__tests__/useMedia.tsx
@@ -1,4 +1,4 @@
-import { renderHook } from '@testing-library/react-hooks'
+import { renderHook } from '@testing-library/react'
import { useMedia } from '..'
describe('useMedia hook', () => {
diff --git a/packages/use-query-params/src/__tests__/index.tsx b/packages/use-query-params/src/__tests__/index.tsx
index 17a362555..c897bc469 100644
--- a/packages/use-query-params/src/__tests__/index.tsx
+++ b/packages/use-query-params/src/__tests__/index.tsx
@@ -1,4 +1,4 @@
-import { act, renderHook } from '@testing-library/react-hooks'
+import { act, renderHook } from '@testing-library/react'
import { History, createMemoryHistory } from 'history'
import { ReactNode, useLayoutEffect, useState } from 'react'
import { MemoryRouter, Router } from 'react-router-dom'
diff --git a/packages/use-random-name/src/__tests__/index.ts b/packages/use-random-name/src/__tests__/index.ts
index 93ede85d9..4cca2045a 100644
--- a/packages/use-random-name/src/__tests__/index.ts
+++ b/packages/use-random-name/src/__tests__/index.ts
@@ -1,4 +1,4 @@
-import { renderHook } from '@testing-library/react-hooks'
+import { renderHook } from '@testing-library/react'
import useRandomName from '..'
describe('useRandomName', () => {
diff --git a/packages/use-segment/src/__tests__/index.tsx b/packages/use-segment/src/__tests__/index.tsx
index 200888f09..2c15c81ae 100644
--- a/packages/use-segment/src/__tests__/index.tsx
+++ b/packages/use-segment/src/__tests__/index.tsx
@@ -1,5 +1,5 @@
import { AnalyticsBrowser, Context } from '@segment/analytics-next'
-import { renderHook } from '@testing-library/react-hooks'
+import { renderHook, waitFor } from '@testing-library/react'
import { ReactNode } from 'react'
import waitForExpect from 'wait-for-expect'
import SegmentProvider, { useSegment } from '..'
@@ -67,10 +67,18 @@ describe('segment hook', () => {
})
it('useSegment should not be defined without SegmentProvider', () => {
- const { result } = renderHook(() => useSegment())
- expect(() => {
- expect(result.current).toBe(undefined)
- }).toThrow(Error('useSegment must be used within a SegmentProvider'))
+ const orignalConsoleError = console.error
+ console.error = jest.fn
+
+ try {
+ renderHook(() => useSegment())
+ } catch (error) {
+ expect((error as Error)?.message).toBe(
+ 'useSegment must be used within a SegmentProvider',
+ )
+ }
+
+ console.error = orignalConsoleError
})
it('useSegment should not load without settings', () => {
@@ -116,26 +124,25 @@ describe('segment hook', () => {
.spyOn(AnalyticsBrowser, 'load')
.mockResolvedValue([{} as Analytics, {} as Context])
- const { result, waitForNextUpdate } = renderHook(
- () => useSegment(),
- {
- wrapper: wrapper({
- events: defaultEvents,
- initOptions: {
- integrations: {
- testInteg: false,
- testInteg2: true,
- testInteg3: false,
- },
+ const { result } = renderHook(() => useSegment(), {
+ wrapper: wrapper({
+ events: defaultEvents,
+ initOptions: {
+ integrations: {
+ testInteg: false,
+ testInteg2: true,
+ testInteg3: false,
},
- settings: { writeKey: 'sample ' },
- }),
- },
- )
+ },
+ settings: { writeKey: 'sample ' },
+ }),
+ })
- await waitForNextUpdate()
expect(mock).toHaveBeenCalledTimes(1)
- expect(result.current.analytics).toStrictEqual({})
+
+ await waitFor(() => {
+ expect(result.current.analytics).toStrictEqual({})
+ })
})
it('Provider should load with key', async () => {
@@ -145,20 +152,19 @@ describe('segment hook', () => {
const settings = { writeKey: 'helloworld' }
- const { result, waitForNextUpdate } = renderHook(
- () => useSegment(),
- {
- wrapper: wrapper({
- events: defaultEvents,
- settings,
- }),
- },
- )
+ const { result } = renderHook(() => useSegment(), {
+ wrapper: wrapper({
+ events: defaultEvents,
+ settings,
+ }),
+ })
- await waitForNextUpdate()
expect(mock).toHaveBeenCalledTimes(1)
expect(mock).toHaveBeenCalledWith(settings, undefined)
- expect(result.current.analytics).toStrictEqual({})
+
+ await waitFor(() => {
+ expect(result.current.analytics).toStrictEqual({})
+ })
})
it('Provider should load with key and cdn', async () => {
@@ -168,20 +174,19 @@ describe('segment hook', () => {
const settings = { cdn: 'https://cdn.proxy', writeKey: 'helloworld' }
- const { result, waitForNextUpdate } = renderHook(
- () => useSegment(),
- {
- wrapper: wrapper({
- events: defaultEvents,
- settings,
- }),
- },
- )
+ const { result } = renderHook(() => useSegment(), {
+ wrapper: wrapper({
+ events: defaultEvents,
+ settings,
+ }),
+ })
- await waitForNextUpdate()
expect(mock).toHaveBeenCalledTimes(1)
expect(mock).toHaveBeenCalledWith(settings, undefined)
- expect(result.current.analytics).toStrictEqual({})
+
+ await waitFor(() => {
+ expect(result.current.analytics).toStrictEqual({})
+ })
})
it('Provider should load and call onError on analytics load error', async () => {
@@ -218,23 +223,20 @@ describe('segment hook', () => {
const settings = { writeKey: 'pleasethrow' }
- const { result, waitForNextUpdate } = renderHook(
- () => useSegment(),
- {
- wrapper: wrapper({
- events: defaultEvents,
- onError,
- onEventError,
- settings,
- }),
- },
- )
+ const { result } = renderHook(() => useSegment(), {
+ wrapper: wrapper({
+ events: defaultEvents,
+ onError,
+ onEventError,
+ settings,
+ }),
+ })
expect(mock).toHaveBeenCalledTimes(1)
- await waitForNextUpdate()
-
- await result.current.events.errorEvent()
+ await waitFor(async () => {
+ await result.current.events.errorEvent()
+ })
await waitForExpect(() => {
expect(onEventError).toHaveBeenCalledTimes(1)
@@ -252,21 +254,20 @@ describe('segment hook', () => {
initialPageview: false,
}
- const { result, waitForNextUpdate } = renderHook(
- () => useSegment(),
- {
- wrapper: wrapper({
- events: defaultEvents,
- initOptions,
- settings,
- }),
- },
- )
+ const { result } = renderHook(() => useSegment(), {
+ wrapper: wrapper({
+ events: defaultEvents,
+ initOptions,
+ settings,
+ }),
+ })
- await waitForNextUpdate()
expect(mock).toHaveBeenCalledTimes(1)
expect(mock).toHaveBeenCalledWith(settings, initOptions)
- expect(result.current.analytics).toStrictEqual({})
+
+ await waitFor(() => {
+ expect(result.current.analytics).toStrictEqual({})
+ })
})
it('useSegment should correctly infer types', async () => {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8dc12c8b9..f9cb9475f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -16,7 +16,6 @@ importers:
'@rollup/plugin-node-resolve': 13.3.0
'@testing-library/jest-dom': 5.16.4
'@testing-library/react': 13.3.0
- '@testing-library/react-hooks': 8.0.0
'@types/jest': 28.1.1
'@types/node': 17.0.31
'@types/prop-types': 15.7.5
@@ -55,7 +54,6 @@ importers:
'@rollup/plugin-node-resolve': 13.3.0_rollup@2.75.6
'@testing-library/jest-dom': 5.16.4
'@testing-library/react': 13.3.0_ef5jwxihqo6n7gxfmzogljlgcm
- '@testing-library/react-hooks': 8.0.0_eurjwfem4ie5nnznw6gmhlbswe
'@types/jest': 28.1.1
'@types/node': 17.0.31
'@types/prop-types': 15.7.5
@@ -405,15 +403,9 @@ packages:
'@babel/types': 7.18.4
dev: true
- /@babel/helper-plugin-utils/7.16.7:
- resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==}
- engines: {node: '>=6.9.0'}
- dev: false
-
/@babel/helper-plugin-utils/7.17.12:
resolution: {integrity: sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-remap-async-to-generator/7.16.8:
resolution: {integrity: sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==}
@@ -798,16 +790,6 @@ packages:
'@babel/helper-plugin-utils': 7.17.12
dev: true
- /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.18.2:
- resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.18.2
- '@babel/helper-plugin-utils': 7.16.7
- dev: false
-
/@babel/plugin-syntax-jsx/7.17.12_@babel+core@7.18.2:
resolution: {integrity: sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==}
engines: {node: '>=6.9.0'}
@@ -816,7 +798,6 @@ packages:
dependencies:
'@babel/core': 7.18.2
'@babel/helper-plugin-utils': 7.17.12
- dev: true
/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.18.2:
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
@@ -1468,11 +1449,11 @@ packages:
- supports-color
dev: true
- /@babel/runtime-corejs3/7.17.9:
- resolution: {integrity: sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==}
+ /@babel/runtime-corejs3/7.18.3:
+ resolution: {integrity: sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q==}
engines: {node: '>=6.9.0'}
dependencies:
- core-js-pure: 3.22.5
+ core-js-pure: 3.22.8
regenerator-runtime: 0.13.9
dev: false
@@ -1715,7 +1696,7 @@ packages:
dependencies:
'@babel/core': 7.18.2
'@babel/helper-module-imports': 7.16.7
- '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.18.2
+ '@babel/plugin-syntax-jsx': 7.17.12_@babel+core@7.18.2
'@babel/runtime': 7.17.9
'@emotion/hash': 0.8.0
'@emotion/memoize': 0.7.5
@@ -4263,29 +4244,6 @@ packages:
redent: 3.0.0
dev: true
- /@testing-library/react-hooks/8.0.0_eurjwfem4ie5nnznw6gmhlbswe:
- resolution: {integrity: sha512-uZqcgtcUUtw7Z9N32W13qQhVAD+Xki2hxbTR461MKax8T6Jr8nsUvZB+vcBTkzY2nFvsUet434CsgF0ncW2yFw==}
- engines: {node: '>=12'}
- peerDependencies:
- '@types/react': ^16.9.0 || ^17.0.0 || 18
- react: ^16.9.0 || ^17.0.0 || 18
- react-dom: ^16.9.0 || ^17.0.0 || 18
- react-test-renderer: ^16.9.0 || ^17.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
- react-dom:
- optional: true
- react-test-renderer:
- optional: true
- dependencies:
- '@babel/runtime': 7.17.9
- '@types/react': 18.0.12
- react: 18.1.0
- react-dom: 18.1.0_react@18.1.0
- react-error-boundary: 3.1.4_react@18.1.0
- dev: true
-
/@testing-library/react/13.3.0_ef5jwxihqo6n7gxfmzogljlgcm:
resolution: {integrity: sha512-DB79aA426+deFgGSjnf5grczDPiL4taK3hFaa+M5q7q20Kcve9eQottOG5kZ74KEr55v0tU2CQormSSDK87zYQ==}
engines: {node: '>=12'}
@@ -4403,7 +4361,7 @@ packages:
dev: false
/@types/json5/0.0.29:
- resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=}
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
dev: false
/@types/minimatch/3.0.5:
@@ -4789,7 +4747,7 @@ packages:
engines: {node: '>=6.0'}
dependencies:
'@babel/runtime': 7.17.9
- '@babel/runtime-corejs3': 7.17.9
+ '@babel/runtime-corejs3': 7.18.3
dev: false
/aria-query/5.0.0:
@@ -4811,7 +4769,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
get-intrinsic: 1.1.1
is-string: 1.0.7
dev: false
@@ -4826,7 +4784,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
es-shim-unscopables: 1.0.0
dev: false
@@ -4836,7 +4794,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
es-shim-unscopables: 1.0.0
dev: false
@@ -4855,7 +4813,7 @@ packages:
dev: true
/ast-types-flow/0.0.7:
- resolution: {integrity: sha1-9wtzXGvKGlycItmCw+Oef+ujva0=}
+ resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
dev: false
/astral-regex/2.0.0:
@@ -4878,9 +4836,9 @@ packages:
hasBin: true
dev: true
- /axe-core/4.4.1:
- resolution: {integrity: sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==}
- engines: {node: '>=4'}
+ /axe-core/4.4.2:
+ resolution: {integrity: sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==}
+ engines: {node: '>=12'}
dev: false
/axobject-query/2.2.0:
@@ -5498,8 +5456,8 @@ packages:
semver: 7.0.0
dev: true
- /core-js-pure/3.22.5:
- resolution: {integrity: sha512-8xo9R00iYD7TcV7OrC98GwxiUEAabVWO3dix+uyWjnYrx9fyASLlIX+f/3p5dW5qByaP2bcZ8X/T47s55et/tA==}
+ /core-js-pure/3.22.8:
+ resolution: {integrity: sha512-bOxbZIy9S5n4OVH63XaLVXZ49QKicjowDx/UELyJ68vxfCRpYsbyh/WNZNfEfAk+ekA8vSjt+gCDpvh672bc3w==}
requiresBuild: true
dev: false
@@ -5677,7 +5635,7 @@ packages:
dev: true
/decode-uri-component/0.2.0:
- resolution: {integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=}
+ resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==}
engines: {node: '>=0.10'}
/dedent/0.7.0:
@@ -5868,8 +5826,8 @@ packages:
dependencies:
is-arrayish: 0.2.1
- /es-abstract/1.20.0:
- resolution: {integrity: sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==}
+ /es-abstract/1.20.1:
+ resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
@@ -5888,7 +5846,7 @@ packages:
is-shared-array-buffer: 1.0.2
is-string: 1.0.7
is-weakref: 1.0.2
- object-inspect: 1.12.0
+ object-inspect: 1.12.2
object-keys: 1.1.1
object.assign: 4.1.2
regexp.prototype.flags: 1.4.3
@@ -6088,7 +6046,7 @@ packages:
aria-query: 4.2.2
array-includes: 3.1.5
ast-types-flow: 0.0.7
- axe-core: 4.4.1
+ axe-core: 4.4.2
axobject-query: 2.2.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
@@ -6361,7 +6319,7 @@ packages:
to-regex-range: 5.0.1
/filter-obj/1.1.0:
- resolution: {integrity: sha1-mzERErxsYSehbgFsbF1/GeCAXFs=}
+ resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==}
engines: {node: '>=0.10.0'}
/find-root/1.1.0:
@@ -6369,7 +6327,7 @@ packages:
dev: false
/find-up/2.1.0:
- resolution: {integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=}
+ resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==}
engines: {node: '>=4'}
dependencies:
locate-path: 2.0.0
@@ -6455,7 +6413,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
functions-have-names: 1.2.3
dev: false
@@ -6938,7 +6896,7 @@ packages:
dev: true
/is-arrayish/0.2.1:
- resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=}
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
/is-bigint/1.0.4:
resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
@@ -6992,7 +6950,7 @@ packages:
dev: true
/is-extglob/2.1.1:
- resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
/is-fullwidth-code-point/1.0.0:
@@ -7819,7 +7777,7 @@ packages:
dev: false
/language-tags/1.0.5:
- resolution: {integrity: sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=}
+ resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
dependencies:
language-subtag-registry: 0.3.21
dev: false
@@ -7971,7 +7929,7 @@ packages:
dev: true
/locate-path/2.0.0:
- resolution: {integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=}
+ resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
engines: {node: '>=4'}
dependencies:
p-locate: 2.0.0
@@ -8051,7 +8009,7 @@ packages:
dev: true
/lz-string/1.4.4:
- resolution: {integrity: sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=}
+ resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==}
hasBin: true
/magic-string/0.26.2:
@@ -8645,15 +8603,11 @@ packages:
dev: false
/object-assign/4.1.1:
- resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=}
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
- /object-inspect/1.12.0:
- resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==}
-
/object-inspect/1.12.2:
resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
- dev: true
/object-keys/1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
@@ -8674,7 +8628,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
dev: false
/object.fromentries/2.0.5:
@@ -8683,14 +8637,14 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
dev: false
/object.hasown/1.1.1:
resolution: {integrity: sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==}
dependencies:
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
dev: false
/object.values/1.1.5:
@@ -8699,7 +8653,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
dev: false
/once/1.4.0:
@@ -8784,7 +8738,7 @@ packages:
dev: true
/p-locate/2.0.0:
- resolution: {integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=}
+ resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
engines: {node: '>=4'}
dependencies:
p-limit: 1.3.0
@@ -8841,7 +8795,7 @@ packages:
dev: true
/p-try/1.0.0:
- resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=}
+ resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
engines: {node: '>=4'}
/p-try/2.2.0:
@@ -8942,7 +8896,7 @@ packages:
dev: true
/path-exists/3.0.0:
- resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=}
+ resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
engines: {node: '>=4'}
/path-exists/4.0.0:
@@ -9176,16 +9130,6 @@ packages:
react: 18.1.0
scheduler: 0.22.0
- /react-error-boundary/3.1.4_react@18.1.0:
- resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==}
- engines: {node: '>=10', npm: '>=6'}
- peerDependencies:
- react: '>=16.13.1 || 18'
- dependencies:
- '@babel/runtime': 7.17.9
- react: 18.1.0
- dev: true
-
/react-is/16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
dev: false
@@ -9622,7 +9566,7 @@ packages:
dependencies:
call-bind: 1.0.2
get-intrinsic: 1.1.1
- object-inspect: 1.12.0
+ object-inspect: 1.12.2
/signal-exit/3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
@@ -9866,7 +9810,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
get-intrinsic: 1.1.1
has-symbols: 1.0.3
internal-slot: 1.0.3
@@ -9879,7 +9823,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
dev: false
/string.prototype.trimstart/1.0.5:
@@ -9887,7 +9831,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.0
+ es-abstract: 1.20.1
dev: false
/string_decoder/1.1.1: