diff options
| author | Armand Philippot <git@armandphilippot.com> | 2022-03-24 19:14:15 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2022-03-24 21:30:55 +0100 |
| commit | 641cfdb0b28ffa0e6cd5d2342bc218613ce4d051 (patch) | |
| tree | 6315c0b3440c0133b32ba6fc77239f565e218707 | |
| parent | fba491f2c4e878cc9c7ae9788d9316cb21e30e01 (diff) | |
test(jest): define a custom render function to set providers
| -rw-r--r-- | __tests__/utils/test-utils.tsx | 44 | ||||
| -rw-r--r-- | jest.config.js | 6 | ||||
| -rw-r--r-- | tsconfig.json | 5 |
3 files changed, 53 insertions, 2 deletions
diff --git a/__tests__/utils/test-utils.tsx b/__tests__/utils/test-utils.tsx new file mode 100644 index 0000000..4befd47 --- /dev/null +++ b/__tests__/utils/test-utils.tsx @@ -0,0 +1,44 @@ +import { render, RenderOptions } from '@testing-library/react'; +import { ThemeProvider } from 'next-themes'; +import { FC } from 'react'; +import { IntlProvider } from 'react-intl'; + +type ProvidersConfig = { + locale?: 'en' | 'fr'; +}; + +type CustomRenderOptions = { + providers: ProvidersConfig; + testingLibrary: Omit<RenderOptions, 'wrapper'>; +}; + +/** + * Return a component wrapped with Intl and Theme Provider. + * + * @returns A component wrapped Intl and Theme providers. + */ +const AllTheProviders: FC<ProvidersConfig> = ({ children, locale = 'en' }) => { + return ( + <IntlProvider locale={locale}> + <ThemeProvider>{children}</ThemeProvider> + </IntlProvider> + ); +}; + +/** + * Render a component with all the providers. + * + * @param {JSX.Element} ui - A React component. + * @param {CustomRenderOptions} [options] - An object of render options and providers options. + * @returns A React component wrapped with all the providers. + */ +const customRender = (ui: JSX.Element, options?: CustomRenderOptions) => { + const Component = () => ui; + render(<Component />, { + wrapper: () => <AllTheProviders {...options?.providers} />, + ...options?.testingLibrary, + }); +}; + +export * from '@testing-library/react'; +export { customRender as render }; diff --git a/jest.config.js b/jest.config.js index 8f397f6..8ca07f3 100644 --- a/jest.config.js +++ b/jest.config.js @@ -26,6 +26,7 @@ const customJestConfig = { '^@pages/(.*)$': '<rootDir>/src/pages/$1', '^@services/(.*)$': '<rootDir>/src/services/$1', '^@styles/(.*)$': '<rootDir>/src/styles/$1', + '^@test-utils': '<rootDir>/__tests__/utils/test-utils', '^@ts/(.*)$': '<rootDir>/src/ts/$1', '^@utils/(.*)$': '<rootDir>/src/utils/$1', }, @@ -35,6 +36,11 @@ const customJestConfig = { // The test environment that will be used for testing testEnvironment: 'jest-environment-jsdom', + + testPathIgnorePatterns: [ + '<rootDir>/__tests__/jest/__mocks__', + '<rootDir>/__tests__/utils', + ], }; /** diff --git a/tsconfig.json b/tsconfig.json index e110340..318ac6d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,8 +23,9 @@ "@pages/*": ["src/pages/*"], "@services/*": ["src/services/*"], "@styles/*": ["src/styles/*"], - "@utils/*": ["src/utils/*"], - "@ts/*": ["src/ts/*"] + "@test-utils": ["__tests__/utils/test-utils"], + "@ts/*": ["src/ts/*"], + "@utils/*": ["src/utils/*"] } }, "include": [ |
