diff --git a/packages/vitest/src/node/cli/cli-config.ts b/packages/vitest/src/node/cli/cli-config.ts index 7d7c9532c..51d543be9 100644 --- a/packages/vitest/src/node/cli/cli-config.ts +++ b/packages/vitest/src/node/cli/cli-config.ts @@ -155,6 +155,19 @@ export const cliOptionsConfig: VitestCLIOptions = { silent: { description: 'Silent console output from tests. Use `\'passed-only\'` to see logs from failing tests only.', argument: '[value]', + transform(value) { + if (value === 'true' || value === 'yes' || value === true) { + return true + } + if (value === 'false' || value === 'no' || value === false) { + return false + } + if (value === 'passed-only') { + return value + } + + throw new TypeError(`Unexpected value "--silent=${value}". Use "--silent=true ${value}" instead.`) + }, }, hideSkippedTests: { description: 'Hide logs for skipped tests', diff --git a/test/core/test/cli-test.test.ts b/test/core/test/cli-test.test.ts index 98f79d27c..56c6ada65 100644 --- a/test/core/test/cli-test.test.ts +++ b/test/core/test/cli-test.test.ts @@ -342,6 +342,20 @@ test('configure expect', () => { }) }) +test('silent', () => { + expect(getCLIOptions('--silent')).toEqual({ silent: true }) + expect(getCLIOptions('--silent=true')).toEqual({ silent: true }) + expect(getCLIOptions('--silent=yes')).toEqual({ silent: true }) + + expect(getCLIOptions('--silent=false')).toEqual({ silent: false }) + expect(getCLIOptions('--silent=no')).toEqual({ silent: false }) + + expect(getCLIOptions('--silent=passed-only')).toEqual({ silent: 'passed-only' }) + expect(getCLIOptions('--silent=true example.test.ts')).toEqual({ silent: true }) + + expect(() => getCLIOptions('--silent example.test.ts')).toThrowErrorMatchingInlineSnapshot(`[TypeError: Unexpected value "--silent=example.test.ts". Use "--silent=true example.test.ts" instead.]`) +}) + test('public parseCLI works correctly', () => { expect(parseCLI('vitest dev')).toEqual({ filter: [],