| import { describe, expect, it, vi } from 'vitest'; |
|
|
| const captureException = vi.fn(); |
| const setTag = vi.fn(); |
|
|
| vi.mock('@sentry/node', () => ({ |
| withScope: (cb: (scope: { setTag: typeof setTag }) => void) => cb({ setTag }), |
| captureException, |
| })); |
|
|
| vi.mock('hono/route', () => ({ |
| routePath: () => '/test/path', |
| })); |
|
|
| vi.mock('@/utils/logger', () => ({ |
| default: { |
| error: vi.fn(), |
| }, |
| })); |
|
|
| vi.mock('@/utils/otel', () => ({ |
| requestMetric: { |
| error: vi.fn(), |
| }, |
| })); |
|
|
| describe('error handler sentry', () => { |
| it('sends errors to sentry when enabled', async () => { |
| process.env.SENTRY = 'dsn'; |
| vi.resetModules(); |
|
|
| const { errorHandler } = await import('@/errors'); |
|
|
| const ctx = { |
| req: { |
| path: '/test/path', |
| method: 'GET', |
| query: () => 'json', |
| }, |
| res: { |
| status: 500, |
| headers: new Headers(), |
| }, |
| status: vi.fn(), |
| header: vi.fn(), |
| json: (payload: unknown) => payload, |
| html: (payload: unknown) => payload, |
| }; |
|
|
| errorHandler(new Error('boom'), ctx as any); |
|
|
| expect(setTag).toHaveBeenCalledWith('name', 'test'); |
| expect(captureException).toHaveBeenCalled(); |
|
|
| delete process.env.SENTRY; |
| }); |
| }); |
|
|