Barazo default frontend barazo.forum
at main 59 lines 1.9 kB view raw
1import { render, screen } from '@testing-library/react' 2import userEvent from '@testing-library/user-event' 3import { axe } from 'vitest-axe' 4import RootError from './error' 5 6// Mock next/link to render a plain anchor 7vi.mock('next/link', () => ({ 8 default: ({ href, children, ...props }: { href: string; children: React.ReactNode }) => ( 9 <a href={href} {...props}> 10 {children} 11 </a> 12 ), 13})) 14 15describe('RootError', () => { 16 const error = new Error('Something broke') 17 const reset = vi.fn() 18 19 beforeEach(() => { 20 reset.mockClear() 21 }) 22 23 it('renders error heading', () => { 24 render(<RootError error={error} reset={reset} />) 25 expect(screen.getByRole('heading', { name: 'Something went wrong' })).toBeInTheDocument() 26 }) 27 28 it('renders an alert region', () => { 29 render(<RootError error={error} reset={reset} />) 30 expect(screen.getByRole('alert')).toBeInTheDocument() 31 }) 32 33 it('renders try again button that calls reset', async () => { 34 const user = userEvent.setup() 35 render(<RootError error={error} reset={reset} />) 36 const button = screen.getByRole('button', { name: /try again/i }) 37 await user.click(button) 38 expect(reset).toHaveBeenCalledOnce() 39 }) 40 41 it('renders a go home link', () => { 42 render(<RootError error={error} reset={reset} />) 43 const link = screen.getByRole('link', { name: /go home/i }) 44 expect(link).toHaveAttribute('href', '/') 45 }) 46 47 it('shows error message in development', () => { 48 vi.stubEnv('NODE_ENV', 'development') 49 render(<RootError error={error} reset={reset} />) 50 expect(screen.getByText('Something broke')).toBeInTheDocument() 51 vi.unstubAllEnvs() 52 }) 53 54 it('passes axe accessibility check', async () => { 55 const { container } = render(<RootError error={error} reset={reset} />) 56 const results = await axe(container) 57 expect(results).toHaveNoViolations() 58 }) 59})