|
1 | | -const { Console } = require("console"); |
2 | | -const nodeConsole = new Console(process.stdout, process.stderr); |
3 | | - |
4 | | -// Mock loglevel |
5 | | -const createMockLogger = () => { |
6 | | - const logger = { |
7 | | - trace: jest.fn(), |
8 | | - debug: jest.fn(), |
9 | | - info: jest.fn(), |
10 | | - warn: jest.fn(), |
11 | | - error: jest.fn(), |
12 | | - setLevel: jest.fn() |
| 1 | +// Jest setup - uses real loglevel, writing to stdout to avoid stack traces from console.warn/error. |
| 2 | +// Format: loggerName [LEVEL] message |
| 3 | +// Log level is controlled by LOG_LEVEL env (default "warn" in src/log.js). |
| 4 | + |
| 5 | +const loglevel = require("loglevel"); |
| 6 | +const { inspect } = require("util"); |
| 7 | + |
| 8 | +loglevel.methodFactory = function (methodName, _level, loggerName) { |
| 9 | + return function (...args) { |
| 10 | + const message = args |
| 11 | + .map((a) => (typeof a === "string" ? a : inspect(a))) |
| 12 | + .join(" "); |
| 13 | + const name = |
| 14 | + loggerName != null && loggerName !== "" |
| 15 | + ? String(loggerName) |
| 16 | + : "log"; |
| 17 | + process.stdout.write(`${name} [${methodName.toUpperCase()}] ${message}\n`); |
13 | 18 | }; |
14 | | - |
15 | | - // Modify warn to print directly to stdout instead of console.warn |
16 | | - logger.warn.mockImplementation((...args) => { |
17 | | - // This uses Node's real util.inspect internally |
18 | | - nodeConsole.warn("[warn]", ...args); |
19 | | - }); |
20 | | - |
21 | | - return logger; |
22 | 19 | }; |
23 | | - |
24 | | -const mockLog = createMockLogger(); |
25 | | - |
26 | | -mockLog.getLogger = jest.fn(name => { |
27 | | - const namedLogger = createMockLogger(); |
28 | | - namedLogger.name = name; |
29 | | - return namedLogger; |
30 | | -}); |
31 | | - |
32 | | -jest.mock("loglevel", () => mockLog); |
33 | | - |
34 | | -// Optional global access for assertions |
35 | | -global.mockLog = mockLog; |
36 | | - |
37 | | -// Override console.warn to remove stack traces |
38 | | -console.warn = nodeConsole.warn; |
39 | | -console.time = nodeConsole.time; |
40 | | -console.timeEnd = nodeConsole.timeEnd; |
| 20 | +loglevel.rebuild(); |
0 commit comments