diff --git a/packages/pn-personagiuridica-webapp/package.json b/packages/pn-personagiuridica-webapp/package.json index abd62eb9e5..a793ce1a5c 100644 --- a/packages/pn-personagiuridica-webapp/package.json +++ b/packages/pn-personagiuridica-webapp/package.json @@ -41,6 +41,7 @@ "preview": "vite preview", "test": "tsc && vitest --run", "test:fast": "vitest --run", + "test:a11y": "vitest --run --config ./vite.config.a11y.ts", "test:all": "vitest --run --config ./vite.config.all.ts", "test:coverage": "tsc && vitest run --coverage", "lint": "eslint . -c .eslintrc.js --ext .ts,.tsx --fix", @@ -87,6 +88,7 @@ "eslint-plugin-react": "^7.27.1", "eslint-plugin-react-hooks": "^4.3.0", "eslint-plugin-sonarjs": "^0.10.0", + "jest-axe": "^6.0.0", "jsdom": "^24.0.0", "prettier": "^2.4.1", "sonarqube-scanner": "^3.3.0", diff --git a/packages/pn-personagiuridica-webapp/src/__test__/test-utils.tsx b/packages/pn-personagiuridica-webapp/src/__test__/test-utils.tsx index 816f3e8ed2..4bc2a9ea3d 100644 --- a/packages/pn-personagiuridica-webapp/src/__test__/test-utils.tsx +++ b/packages/pn-personagiuridica-webapp/src/__test__/test-utils.tsx @@ -1,3 +1,4 @@ +import { configureAxe, toHaveNoViolations } from 'jest-axe'; import { ReactElement, ReactNode } from 'react'; import { Provider } from 'react-redux'; import { BrowserRouter } from 'react-router-dom'; @@ -59,6 +60,12 @@ const customRender = ( }); }; +const axe = configureAxe({ + rules: { + region: { enabled: false }, + }, +}); + const createMockedStore = (preloadedState: any) => configureStore({ reducer: appReducers, @@ -69,7 +76,9 @@ const createMockedStore = (preloadedState: any) => }), }); +expect.extend(toHaveNoViolations); + // re-exporting everything export * from '@testing-library/react'; // override render method -export { createMockedStore, customRender as render, testStore }; +export { axe, createMockedStore, customRender as render, testStore }; diff --git a/packages/pn-personagiuridica-webapp/vite.config.a11y.ts b/packages/pn-personagiuridica-webapp/vite.config.a11y.ts new file mode 100644 index 0000000000..9866859847 --- /dev/null +++ b/packages/pn-personagiuridica-webapp/vite.config.a11y.ts @@ -0,0 +1,18 @@ +/// +import { defineConfig } from 'vite'; + +import react from '@vitejs/plugin-react'; + +// https://vitejs.dev/config/ +export default defineConfig(() => { + return { + plugins: [react()], + test: { + globals: true, + setupFiles: './src/setupTests.ts', + environment: 'jsdom', + include: ['**/*.a11y.test.ts', '**/*.a11y.test.tsx'], + reporters: ['default'], + }, + }; +}); diff --git a/packages/pn-personagiuridica-webapp/vite.config.mts b/packages/pn-personagiuridica-webapp/vite.config.mts index 1611937009..1298cb3743 100644 --- a/packages/pn-personagiuridica-webapp/vite.config.mts +++ b/packages/pn-personagiuridica-webapp/vite.config.mts @@ -9,13 +9,13 @@ const vitestConfig = defineVitestConfig({ globals: true, setupFiles: './src/setupTests.ts', environment: 'jsdom', - exclude: configDefaults.exclude, + exclude: [...configDefaults.exclude, '**/*.a11y.test.ts', '**/*.a11y.test.tsx'], reporters: ['vitest-sonar-reporter', 'default'], outputFile: 'test-report.xml', coverage: { provider: 'v8', reporter: ['lcov'], - exclude: ['src/models/**'], + exclude: ['**/*.a11y.test.ts', '**/*.a11y.test.tsx', 'src/models/**'], reportOnFailure: true, }, },