Ctrl K
ComunidadGuías…

lib/middleware/honeybadger.test.ts

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { Context } from 'hono';
import { afterEach, describe, expect, it, vi } from 'vitest';

afterEach(() => {
    vi.resetModules();
    vi.restoreAllMocks();
    delete process.env.HONEYBADGER_API_KEY;
    delete process.env.ERROR_TRACKING_ROUTE_TIMEOUT;
    delete process.env.NODE_NAME;
});

describe('honeybadger middleware', () => {
    it('initializes honeybadger and captures slow routes', async () => {
        process.env.HONEYBADGER_API_KEY = 'hbp_test_key';
        process.env.ERROR_TRACKING_ROUTE_TIMEOUT = '50';
        process.env.NODE_NAME = 'node-a';

        const { default: honeybadger } = await import('@honeybadger-io/js');
        const configureSpy = vi.spyOn(honeybadger, 'configure').mockReturnValue(honeybadger);
        const setContextSpy = vi.spyOn(honeybadger, 'setContext').mockReturnValue(honeybadger);
        const notifySpy = vi.spyOn(honeybadger, 'notify').mockReturnValue(false);

        const { default: logger } = await import('@/utils/logger');
        const infoSpy = vi.spyOn(logger, 'info');

        const { default: middleware } = await import('@/middleware/honeybadger');

        expect(configureSpy).toHaveBeenCalledWith({
            apiKey: 'hbp_test_key',
            enableUncaught: false,
        });
        expect(setContextSpy).toHaveBeenCalledWith({ node_name: 'node-a' });
        expect(infoSpy).toHaveBeenCalledWith('Honeybadger inited.');

        const nowSpy = vi.spyOn(Date, 'now');
        nowSpy.mockReturnValueOnce(0).mockReturnValueOnce(100);

        const ctx = new Context(new Request('http://localhost/test/slow'), { env: {}, path: '/test/slow' });
        await middleware(ctx, () => Promise.resolve());

        expect(notifySpy).toHaveBeenCalledTimes(1);
        expect(notifySpy).toHaveBeenCalledWith(expect.any(Error), {
            context: { name: 'test' },
        });
    });
});