refactor(core-testing): no-sentry → no-instrumentation (mocks OTel too)
This commit is contained in:
@@ -12,7 +12,9 @@
|
|||||||
"./payload": "./src/payload/index.ts",
|
"./payload": "./src/payload/index.ts",
|
||||||
"./payload/stub-config": "./src/payload/stub-config.ts",
|
"./payload/stub-config": "./src/payload/stub-config.ts",
|
||||||
"./setup/jsdom": "./src/setup/jsdom.ts",
|
"./setup/jsdom": "./src/setup/jsdom.ts",
|
||||||
"./setup/node": "./src/setup/node.ts"
|
"./setup/node": "./src/setup/node.ts",
|
||||||
|
"./setup/no-instrumentation": "./src/setup/no-instrumentation.ts",
|
||||||
|
"./setup/no-sentry": "./src/setup/no-instrumentation.ts"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc --noEmit",
|
"build": "tsc --noEmit",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import "./no-sentry";
|
import "./no-instrumentation";
|
||||||
import "@testing-library/jest-dom/vitest";
|
import "@testing-library/jest-dom/vitest";
|
||||||
import { afterEach } from "vitest";
|
import { afterEach } from "vitest";
|
||||||
import { cleanup } from "@testing-library/react";
|
import { cleanup } from "@testing-library/react";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { describe, it, expect, vi } from "vitest";
|
import { describe, it, expect, vi } from "vitest";
|
||||||
import * as Sentry from "@sentry/nextjs";
|
import * as Sentry from "@sentry/nextjs";
|
||||||
|
|
||||||
describe("setup/no-sentry guard (R49)", () => {
|
describe("setup/no-instrumentation guard (R49)", () => {
|
||||||
it("Sentry.init is a vi.fn (mocked, not real)", () => {
|
it("Sentry.init is a vi.fn (mocked, not real)", () => {
|
||||||
expect(vi.isMockFunction(Sentry.init)).toBe(true);
|
expect(vi.isMockFunction(Sentry.init)).toBe(true);
|
||||||
});
|
});
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
import { vi } from "vitest";
|
import { vi } from "vitest";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* R49 — guard against real Sentry SDK initialization in test processes.
|
* R49 — guard against real Sentry SDK + OTel SDK initialization in test processes.
|
||||||
*
|
*
|
||||||
* Mocks @sentry/nextjs at the module level so any code that imports it
|
* Mocks @sentry/* and key @opentelemetry/sdk-* modules at the module level so
|
||||||
* receives a no-op surface. Tests that need to assert Sentry behavior
|
* any code that imports them receives a no-op surface. Tests that need to assert
|
||||||
* still use vi.mock locally with their own implementation; this guard
|
* specific SDK behavior still use vi.mock locally with their own implementation;
|
||||||
* just ensures *unintentional* imports don't cause real network/init.
|
* this guard just ensures *unintentional* imports don't cause real network/init.
|
||||||
|
*
|
||||||
|
* Also exported as ./setup/no-sentry for one release cycle (backward-compat alias).
|
||||||
*/
|
*/
|
||||||
vi.mock("@sentry/nextjs", () => ({
|
vi.mock("@sentry/nextjs", () => ({
|
||||||
init: vi.fn(),
|
init: vi.fn(),
|
||||||
@@ -60,3 +62,40 @@ vi.mock("@sentry/react", () => ({
|
|||||||
),
|
),
|
||||||
replayIntegration: vi.fn(() => ({ name: "Replay" })),
|
replayIntegration: vi.fn(() => ({ name: "Replay" })),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
// OTel SDK mocks — prevent real SDK initialization in vitest runs.
|
||||||
|
// Feature packages and core-shared instrumentation code import these; without
|
||||||
|
// mocks the NodeSDK would attempt to bootstrap a real tracer/logger provider.
|
||||||
|
vi.mock("@opentelemetry/sdk-node", () => ({
|
||||||
|
NodeSDK: class {
|
||||||
|
start() {}
|
||||||
|
shutdown() {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Re-export tracing namespace so destructured imports work
|
||||||
|
tracing: {
|
||||||
|
BatchSpanProcessor: class {
|
||||||
|
onStart() {}
|
||||||
|
onEnd() {}
|
||||||
|
forceFlush() { return Promise.resolve(); }
|
||||||
|
shutdown() { return Promise.resolve(); }
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("@sentry/opentelemetry", () => ({
|
||||||
|
SentrySpanProcessor: class {
|
||||||
|
onStart() {}
|
||||||
|
onEnd() {}
|
||||||
|
forceFlush() { return Promise.resolve(); }
|
||||||
|
shutdown() { return Promise.resolve(); }
|
||||||
|
},
|
||||||
|
SentryLogRecordProcessor: class {
|
||||||
|
onEmit() {}
|
||||||
|
forceFlush() { return Promise.resolve(); }
|
||||||
|
shutdown() { return Promise.resolve(); }
|
||||||
|
},
|
||||||
|
// No-op Sentry.init wrapper used by sentry-bridge.ts
|
||||||
|
init: vi.fn(),
|
||||||
|
}));
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import "./no-sentry";
|
import "./no-instrumentation";
|
||||||
|
|
||||||
// Reserved for future global node-env setup. Currently a no-op so that
|
// Reserved for future global node-env setup. Currently a no-op so that
|
||||||
// vitest configs may reference @repo/core-testing/setup/node uniformly.
|
// vitest configs may reference @repo/core-testing/setup/node uniformly.
|
||||||
|
|||||||
Reference in New Issue
Block a user