29 lines
1.3 KiB
TypeScript
29 lines
1.3 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { createLogger } from "../src/index.js";
|
|
import { createSentrySink } from "../src/sentry.js";
|
|
|
|
describe("createSentrySink", () => {
|
|
it("captures errors and explicitly selected events with namespace and structured context", () => {
|
|
const scope = { setLevel: vi.fn(), setTag: vi.fn(), setExtras: vi.fn() };
|
|
const sentry = {
|
|
withScope: (callback: (value: typeof scope) => void) => callback(scope),
|
|
captureException: vi.fn(),
|
|
captureMessage: vi.fn(),
|
|
};
|
|
const logger = createLogger({
|
|
environment: "production",
|
|
namespace: "API",
|
|
sinks: [createSentrySink(sentry)],
|
|
});
|
|
const error = new Error("offline");
|
|
logger.warn("ignored");
|
|
logger.sentry.info("Cache warmed");
|
|
logger.error("Request failed", error, { requestId: "req_1" });
|
|
expect(sentry.captureMessage).toHaveBeenCalledWith("Cache warmed", "info");
|
|
expect(sentry.captureException).toHaveBeenCalledWith(error);
|
|
expect(scope.setLevel).toHaveBeenCalledWith("info");
|
|
expect(scope.setTag).toHaveBeenCalledWith("logger.namespace", "API");
|
|
expect(scope.setExtras).toHaveBeenCalledWith({ context_0: { requestId: "req_1" } });
|
|
});
|
|
});
|