From fba491f2c4e878cc9c7ae9788d9316cb21e30e01 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Thu, 24 Mar 2022 15:53:30 +0100 Subject: build: configure jest Since Next.js v12, Jest is already configured with the next/jest package. I also added a package to mock next/router. --- jest.config.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 jest.config.js (limited to 'jest.config.js') diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..8f397f6 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,44 @@ +const nextJest = require('next/jest'); + +const createJestConfig = nextJest({ + // Provide the path to your Next.js app to load next.config.js and .env files in your test environment + dir: './', +}); + +/* + * Add any custom config to be passed to Jest + * + * For a detailed explanation regarding each configuration property and type + * check, visit: + * https://jestjs.io/docs/configuration + */ +const customJestConfig = { + // if using TypeScript with a baseUrl set to the root directory then you need the below for alias' to work + moduleDirectories: ['node_modules', '/'], + + // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module + moduleNameMapper: { + /** Module Path Aliases */ + '^@i18n/(.*)$': '/src/i18n/$1', + '^@assets/(.*)$': '/src/assets/$1', + '^@content/(.*)$': '/src/content/$1', + '^@components/(.*)$': '/src/components/$1', + '^@pages/(.*)$': '/src/pages/$1', + '^@services/(.*)$': '/src/services/$1', + '^@styles/(.*)$': '/src/styles/$1', + '^@ts/(.*)$': '/src/ts/$1', + '^@utils/(.*)$': '/src/utils/$1', + }, + + // Add more setup options before each test is run + setupFilesAfterEnv: ['/jest.setup.js'], + + // The test environment that will be used for testing + testEnvironment: 'jest-environment-jsdom', +}; + +/** + * createJestConfig is exported this way to ensure that next/jest can load the + * Next.js config which is async. + */ +module.exports = createJestConfig(customJestConfig); -- cgit v1.2.3 From 641cfdb0b28ffa0e6cd5d2342bc218613ce4d051 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Thu, 24 Mar 2022 19:14:15 +0100 Subject: test(jest): define a custom render function to set providers --- __tests__/utils/test-utils.tsx | 44 ++++++++++++++++++++++++++++++++++++++++++ jest.config.js | 6 ++++++ tsconfig.json | 5 +++-- 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 __tests__/utils/test-utils.tsx (limited to 'jest.config.js') 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; +}; + +/** + * Return a component wrapped with Intl and Theme Provider. + * + * @returns A component wrapped Intl and Theme providers. + */ +const AllTheProviders: FC = ({ children, locale = 'en' }) => { + return ( + + {children} + + ); +}; + +/** + * 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(, { + wrapper: () => , + ...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/(.*)$': '/src/pages/$1', '^@services/(.*)$': '/src/services/$1', '^@styles/(.*)$': '/src/styles/$1', + '^@test-utils': '/__tests__/utils/test-utils', '^@ts/(.*)$': '/src/ts/$1', '^@utils/(.*)$': '/src/utils/$1', }, @@ -35,6 +36,11 @@ const customJestConfig = { // The test environment that will be used for testing testEnvironment: 'jest-environment-jsdom', + + testPathIgnorePatterns: [ + '/__tests__/jest/__mocks__', + '/__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": [ -- cgit v1.2.3