File size: 1,377 Bytes
bf48b89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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;
    });
});