portfolio-page/src/app/__tests__/a11y.smoke.test.tsx

46 lines
1.5 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { render, screen } from '@testing-library/react';
import { axe } from 'vitest-axe';
import { MemoryRouter } from 'react-router-dom';
import type { ReactNode } from 'react';
import { LanguageProvider } from '../../contexts/LanguageContext';
import { ThemeProvider } from '../../contexts/ThemeContext';
import LandingPage from '../../pages/LandingPage';
import HomePage from '../../pages/HomePage';
import AuditPage from '../../pages/AuditPage';
import Footer from '../../components/layout/Footer';
function renderPage(children: ReactNode) {
return render(
<MemoryRouter>
<LanguageProvider initialLanguage="de">
<ThemeProvider>{children}</ThemeProvider>
</LanguageProvider>
</MemoryRouter>
);
}
describe('accessibility smoke test', () => {
it('LandingPage has no axe violations', async () => {
const { container } = renderPage(<LandingPage />);
expect(await axe(container)).toHaveNoViolations();
});
it('HomePage has no axe violations', async () => {
const { container } = renderPage(<HomePage />);
expect(await axe(container)).toHaveNoViolations();
});
it('AuditPage has no axe violations', async () => {
const { container } = renderPage(<AuditPage />);
expect(await axe(container)).toHaveNoViolations();
});
it('Footer keeps the active language for the portfolio link', () => {
renderPage(<Footer />);
const link = screen.getByRole('link', { name: 'Technisches Portfolio' });
expect(link).toHaveAttribute('href', '/de/technical');
});
});