diff options
| author | Armand Philippot <git@armandphilippot.com> | 2022-06-01 23:21:30 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2022-06-02 19:10:28 +0200 |
| commit | f7cc48495b085fe8f6cfa37e80e968d5b47639df (patch) | |
| tree | 1e43ee0095979a0009b521ef7cc2a0f069b132b3 /tests | |
| parent | a8af53c118478e6ed68975c32cc1202b7c7b798e (diff) | |
test: install and configure cypress
I also configure Jest to avoid conflicts between Cypress and Jest.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/cypress/fixtures/example.json | 5 | ||||
| -rw-r--r-- | tests/cypress/plugins/index.ts | 22 | ||||
| -rw-r--r-- | tests/cypress/support/commands.ts | 6 | ||||
| -rw-r--r-- | tests/cypress/support/e2e.ts | 20 | ||||
| -rw-r--r-- | tests/cypress/tsconfig.json | 10 | ||||
| -rw-r--r-- | tests/jest/__mocks__/matchMedia.mock.js | 15 | ||||
| -rw-r--r-- | tests/utils/index.tsx | 43 |
7 files changed, 121 insertions, 0 deletions
diff --git a/tests/cypress/fixtures/example.json b/tests/cypress/fixtures/example.json new file mode 100644 index 0000000..02e4254 --- /dev/null +++ b/tests/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/tests/cypress/plugins/index.ts b/tests/cypress/plugins/index.ts new file mode 100644 index 0000000..8229063 --- /dev/null +++ b/tests/cypress/plugins/index.ts @@ -0,0 +1,22 @@ +/// <reference types="cypress" /> +// *********************************************************** +// This example plugins/index.js can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) + +/** + * @type {Cypress.PluginConfig} + */ +// eslint-disable-next-line no-unused-vars +module.exports = (on, config) => { + // `on` is used to hook into various events Cypress emits + // `config` is the resolved Cypress config +}; diff --git a/tests/cypress/support/commands.ts b/tests/cypress/support/commands.ts new file mode 100644 index 0000000..a88e131 --- /dev/null +++ b/tests/cypress/support/commands.ts @@ -0,0 +1,6 @@ +// *********************************************** +// For examples of custom commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** + +import '@testing-library/cypress/add-commands'; diff --git a/tests/cypress/support/e2e.ts b/tests/cypress/support/e2e.ts new file mode 100644 index 0000000..37a498f --- /dev/null +++ b/tests/cypress/support/e2e.ts @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; + +// Alternatively you can use CommonJS syntax: +// require('./commands') diff --git a/tests/cypress/tsconfig.json b/tests/cypress/tsconfig.json new file mode 100644 index 0000000..66b725c --- /dev/null +++ b/tests/cypress/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "isolatedModules": false, + "noEmit": true, + "types": ["cypress", "@testing-library/cypress"] + }, + "include": ["../../node_modules/cypress", "**/*.ts", "**/*.tsx"], + "exclude": ["**/*.test.ts", "**/*.test.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/index.tsx b/tests/utils/index.tsx new file mode 100644 index 0000000..1bcea8e --- /dev/null +++ b/tests/utils/index.tsx @@ -0,0 +1,43 @@ +import { render, RenderOptions } from '@testing-library/react'; +import { ThemeProvider } from 'next-themes'; +import { FC, ReactElement, ReactNode } from 'react'; +import { IntlProvider } from 'react-intl'; + +type ProvidersConfig = { + children: ReactNode; + 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 {ReactElement} 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: ReactElement, options?: CustomRenderOptions) => + render(ui, { + wrapper: (props) => <AllTheProviders {...props} {...options?.providers} />, + ...options?.testingLibrary, + }); + +export * from '@testing-library/react'; +export { customRender as render }; |
