forked from Talenttrust/Talenttrust-Frontend
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherror.test.tsx
More file actions
59 lines (49 loc) · 2.38 KB
/
Copy patherror.test.tsx
File metadata and controls
59 lines (49 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { render, screen, fireEvent } from '@testing-library/react';
import GlobalError from './error';
import { setErrorReporter } from '../lib/errorReporter';
// Suppress React error boundary noise in test output
beforeEach(() => {
jest.spyOn(console, 'error').mockImplementation(() => {});
setErrorReporter(null);
});
afterEach(() => {
jest.restoreAllMocks();
setErrorReporter(null);
});
const testError = Object.assign(new Error('Something broke'), { digest: undefined });
const mockReset = jest.fn();
describe('Error page', () => {
it('renders generic error message without leaking error details', () => {
render(<GlobalError error={testError} reset={mockReset} />);
expect(screen.getByRole('heading', { name: /unexpected error/i })).toBeInTheDocument();
expect(screen.queryByText('Something broke')).not.toBeInTheDocument();
});
it('calls reset when Try Again is clicked', () => {
render(<GlobalError error={testError} reset={mockReset} />);
fireEvent.click(screen.getByRole('button', { name: /try again/i }));
expect(mockReset).toHaveBeenCalledTimes(1);
});
it('renders Home and Contact Support links', () => {
render(<GlobalError error={testError} reset={mockReset} />);
expect(screen.getByRole('link', { name: /go home/i })).toHaveAttribute('href', '/');
expect(screen.getByRole('link', { name: /contact support/i })).toBeInTheDocument();
});
it('logs error to console only in non-production', () => {
const spy = jest.spyOn(console, 'error').mockImplementation(() => {});
// NODE_ENV is 'test' in Jest, which is !== 'production', so logging should fire
render(<GlobalError error={testError} reset={mockReset} />);
expect(spy).toHaveBeenCalledWith('[Error Boundary]', testError);
});
it('does not render error message or stack trace in the UI', () => {
render(<GlobalError error={testError} reset={mockReset} />);
expect(screen.queryByText(/something broke/i)).not.toBeInTheDocument();
expect(screen.queryByText(/digest/i)).not.toBeInTheDocument();
});
it('invokes the pluggable error reporter when rendered', () => {
const mockReporter = jest.fn();
setErrorReporter(mockReporter);
render(<GlobalError error={testError} reset={mockReset} />);
expect(mockReporter).toHaveBeenCalledTimes(1);
expect(mockReporter).toHaveBeenCalledWith(testError, 'Error Boundary', undefined, undefined);
});
});