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 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 __tests__/utils/test-utils.tsx (limited to '__tests__/utils/test-utils.tsx') 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 }; -- cgit v1.2.3 From 2de1ca173ee3d8e5886a1b3fdc4afbe102fad22f Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Thu, 24 Mar 2022 21:31:21 +0100 Subject: test(jest): add a mock for windows matchMedia --- __tests__/jest/__mocks__/matchMedia.mock.js | 15 +++++++++++++++ __tests__/utils/test-utils.tsx | 6 ++---- 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 __tests__/jest/__mocks__/matchMedia.mock.js (limited to '__tests__/utils/test-utils.tsx') diff --git a/__tests__/jest/__mocks__/matchMedia.mock.js b/__tests__/jest/__mocks__/matchMedia.mock.js new file mode 100644 index 0000000..a983ad3 --- /dev/null +++ b/__tests__/jest/__mocks__/matchMedia.mock.js @@ -0,0 +1,15 @@ +Object.defineProperty(window, 'matchMedia', { + writable: true, + value: jest.fn().mockImplementation((query) => ({ + matches: false, + media: query, + onchange: null, + addListener: jest.fn(), // deprecated + removeListener: jest.fn(), // deprecated + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + dispatchEvent: jest.fn(), + })), +}); + +export {}; diff --git a/__tests__/utils/test-utils.tsx b/__tests__/utils/test-utils.tsx index 4befd47..e47bbe1 100644 --- a/__tests__/utils/test-utils.tsx +++ b/__tests__/utils/test-utils.tsx @@ -32,13 +32,11 @@ const AllTheProviders: FC = ({ children, locale = 'en' }) => { * @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(, { +const customRender = (ui: JSX.Element, options?: CustomRenderOptions) => + render(ui, { wrapper: () => , ...options?.testingLibrary, }); -}; export * from '@testing-library/react'; export { customRender as render }; -- cgit v1.2.3