summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-03-24 19:14:15 +0100
committerArmand Philippot <git@armandphilippot.com>2022-03-24 21:30:55 +0100
commit641cfdb0b28ffa0e6cd5d2342bc218613ce4d051 (patch)
tree6315c0b3440c0133b32ba6fc77239f565e218707
parentfba491f2c4e878cc9c7ae9788d9316cb21e30e01 (diff)
test(jest): define a custom render function to set providers
-rw-r--r--__tests__/utils/test-utils.tsx44
-rw-r--r--jest.config.js6
-rw-r--r--tsconfig.json5
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": [