From 31ced76643f7c4ec595f195fc7505bdde587b56b Mon Sep 17 00:00:00 2001 From: Chris Hasson Date: Wed, 27 Aug 2025 12:21:34 -0700 Subject: [PATCH] Show console logging in vitests when the --no-silent flag is set By default, all of the tests run in silent mode with monkey-patched the console logging so no console logging will ever appear in test output. This confuses the agent- sometimes it will add console logging to help it debug things, and it won't see the logs that it expects. Adds src/utils/vitest-verbosity.ts to handle verbosity resolution and console logging. Modifies src/vitest.config.ts and webview-ui/vitest.config.ts to integrate the new verbosity control. Removes manual console suppression from src/vitest.setup.ts and webview-ui/vitest.setup.ts as it's now handled dynamically. --- src/utils/vitest-verbosity.ts | 22 ++++++++++++++++++++++ src/vitest.config.ts | 8 ++++++-- src/vitest.setup.ts | 16 ---------------- webview-ui/vitest.config.ts | 8 ++++++-- webview-ui/vitest.setup.ts | 16 ---------------- 5 files changed, 34 insertions(+), 36 deletions(-) create mode 100644 src/utils/vitest-verbosity.ts diff --git a/src/utils/vitest-verbosity.ts b/src/utils/vitest-verbosity.ts new file mode 100644 index 000000000000..bd44f977d337 --- /dev/null +++ b/src/utils/vitest-verbosity.ts @@ -0,0 +1,22 @@ +export function resolveVerbosity(argv = process.argv, env = process.env) { + // Check if --no-silent flag is used (native vitest flag) + const cliNoSilent = argv.includes("--no-silent") || argv.includes("--silent=false") + const silent = !cliNoSilent // Silent by default + + // Check if verbose reporter is requested + const wantsVerboseReporter = argv.some( + (a) => a === "--reporter=verbose" || a === "-r=verbose" || a === "--reporter", + ) + + return { + silent, + reporters: ["dot", ...(wantsVerboseReporter ? ["verbose"] : [])], + onConsoleLog: (_log: string, type: string) => { + // When verbose, show everything + // When silent, allow errors/warnings and drop info/log/warn noise + if (!silent || type === "stderr") return + + return false // Drop info/log/warn noise + }, + } +} diff --git a/src/vitest.config.ts b/src/vitest.config.ts index 4e576f3c96c4..3a6854d53280 100644 --- a/src/vitest.config.ts +++ b/src/vitest.config.ts @@ -1,15 +1,19 @@ import { defineConfig } from "vitest/config" import path from "path" +import { resolveVerbosity } from "./utils/vitest-verbosity" + +const { silent, reporters, onConsoleLog } = resolveVerbosity() export default defineConfig({ test: { globals: true, setupFiles: ["./vitest.setup.ts"], watch: false, - reporters: ["dot"], - silent: true, + reporters, + silent, testTimeout: 20_000, hookTimeout: 20_000, + onConsoleLog, }, resolve: { alias: { diff --git a/src/vitest.setup.ts b/src/vitest.setup.ts index a7a2c02701d0..fd0bce1cf33f 100644 --- a/src/vitest.setup.ts +++ b/src/vitest.setup.ts @@ -15,19 +15,3 @@ export function allowNetConnect(host?: string | RegExp) { // Global mocks that many tests expect. global.structuredClone = global.structuredClone || ((obj: any) => JSON.parse(JSON.stringify(obj))) - -// Suppress console.log during tests to reduce noise. -// Keep console.error for actual errors. -const originalConsoleLog = console.log -const originalConsoleWarn = console.warn -const originalConsoleInfo = console.info - -console.log = () => {} -console.warn = () => {} -console.info = () => {} - -afterAll(() => { - console.log = originalConsoleLog - console.warn = originalConsoleWarn - console.info = originalConsoleInfo -}) diff --git a/webview-ui/vitest.config.ts b/webview-ui/vitest.config.ts index b9455584bf18..7a87ff2a8007 100644 --- a/webview-ui/vitest.config.ts +++ b/webview-ui/vitest.config.ts @@ -1,15 +1,19 @@ import { defineConfig } from "vitest/config" import path from "path" +import { resolveVerbosity } from "../src/utils/vitest-verbosity" + +const { silent, reporters, onConsoleLog } = resolveVerbosity() export default defineConfig({ test: { globals: true, setupFiles: ["./vitest.setup.ts"], watch: false, - reporters: ["dot"], - silent: true, + reporters, + silent, environment: "jsdom", include: ["src/**/*.spec.ts", "src/**/*.spec.tsx"], + onConsoleLog, }, resolve: { alias: { diff --git a/webview-ui/vitest.setup.ts b/webview-ui/vitest.setup.ts index 12210f0ec201..ee438035e281 100644 --- a/webview-ui/vitest.setup.ts +++ b/webview-ui/vitest.setup.ts @@ -50,19 +50,3 @@ Object.defineProperty(window, "matchMedia", { // Mock scrollIntoView which is not available in jsdom Element.prototype.scrollIntoView = vi.fn() - -// Suppress console.log during tests to reduce noise. -// Keep console.error for actual errors. -const originalConsoleLog = console.log -const originalConsoleWarn = console.warn -const originalConsoleInfo = console.info - -console.log = () => {} -console.warn = () => {} -console.info = () => {} - -afterAll(() => { - console.log = originalConsoleLog - console.warn = originalConsoleWarn - console.info = originalConsoleInfo -})