diff --git a/src/app/__tests__/error.test.tsx b/src/app/__tests__/error.test.tsx
new file mode 100644
index 00000000..633ca346
--- /dev/null
+++ b/src/app/__tests__/error.test.tsx
@@ -0,0 +1,51 @@
+import { render } from '@testing-library/react';
+import { describe, it, expect, vi } from 'vitest';
+import ErrorBoundary from '../error';
+
+const mockReportError = vi.fn();
+const mockAddBreadcrumb = vi.fn();
+
+vi.mock('@/services/errorReporting', () => ({
+ errorReportingService: {
+ reportError: (...args: any[]) => mockReportError(...args),
+ addBreadcrumb: (...args: any[]) => mockAddBreadcrumb(...args),
+ },
+}));
+
+describe('ErrorBoundary', () => {
+ it('calls reportError when an error is caught', () => {
+ const testError = new Error('Test error');
+ const reset = vi.fn();
+
+ render();
+
+ expect(mockReportError).toHaveBeenCalledWith(testError, {
+ errorInfo: { componentStack: '' },
+ });
+ });
+
+ it('calls addBreadcrumb when an error is caught', () => {
+ const testError = new Error('Test error');
+ const reset = vi.fn();
+
+ render();
+
+ expect(mockAddBreadcrumb).toHaveBeenCalledWith('error.tsx', {
+ errorMessage: 'Test error',
+ digest: undefined,
+ });
+ });
+
+ it('passes digest as metadata when available', () => {
+ const testError = new Error('Test error');
+ (testError as any).digest = 'abc123';
+ const reset = vi.fn();
+
+ render();
+
+ expect(mockReportError).toHaveBeenCalledWith(testError, {
+ errorInfo: { componentStack: '' },
+ digest: 'abc123',
+ });
+ });
+});
diff --git a/src/app/error.tsx b/src/app/error.tsx
index c0816cfb..26cfc0d5 100644
--- a/src/app/error.tsx
+++ b/src/app/error.tsx
@@ -18,6 +18,10 @@ export default function ErrorBoundary({
errorMessage: error.message,
digest: error.digest,
});
+ errorReportingService.reportError(error, {
+ errorInfo: { componentStack: '' },
+ ...(error.digest ? { digest: error.digest } : {}),
+ });
logger.error('Application error', { error });
}, [error]);