From 656e210b7a3e55147415a3702fdbfe7420f1d71e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ari=20Perkki=C3=B6?= Date: Mon, 12 Feb 2024 16:55:53 +0200 Subject: [PATCH] fix(cli): parse `--browser=` correctly (#5179) --- packages/vitest/src/node/cli/cli-config.ts | 4 +- test/core/test/cli-test.test.ts | 43 ++++++++++++++++++---- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/packages/vitest/src/node/cli/cli-config.ts b/packages/vitest/src/node/cli/cli-config.ts index 855af3e5bb3d..aeefab1f4d6c 100644 --- a/packages/vitest/src/node/cli/cli-config.ts +++ b/packages/vitest/src/node/cli/cli-config.ts @@ -303,10 +303,12 @@ export const cliOptionsConfig: VitestCLIOptions = { }, browser: { description: 'Run tests in the browser. Equivalent to --browser.enabled (default: false)', - argument: '', // allow boolean + argument: '', transform(browser) { if (typeof browser === 'boolean') return { enabled: browser } + if (browser === 'true' || browser === 'false') + return { enabled: browser !== 'false' } if (typeof browser === 'string') return { enabled: true, name: browser } return browser diff --git a/test/core/test/cli-test.test.ts b/test/core/test/cli-test.test.ts index 774b846b4eca..90612b9e651a 100644 --- a/test/core/test/cli-test.test.ts +++ b/test/core/test/cli-test.test.ts @@ -3,9 +3,9 @@ import { createCLI } from '../../../packages/vitest/src/node/cli/cac.js' const vitestCli = createCLI() -function parseArguments(commands: string, full = false) { +function parseArguments(commands: string, full = false, includeArgs = false) { const cliArgs = commands.trim().replace(/\s+/g, ' ').split(' ') - const { options } = vitestCli.parse(['node', '/index.js', ...cliArgs], { + const { options, args } = vitestCli.parse(['node', '/index.js', ...cliArgs], { run: false, }) // remove -- and color from the options since they are always present @@ -13,6 +13,10 @@ function parseArguments(commands: string, full = false) { delete options['--'] delete options.color } + + if (includeArgs) + return { options, args } + return options } @@ -149,11 +153,11 @@ test('array options', () => { `) expect(parseArguments(` - --reporter json - --reporter=default - --coverage.reporter=json - --coverage.reporter html - --coverage.extension=ts + --reporter json + --reporter=default + --coverage.reporter=json + --coverage.reporter html + --coverage.extension=ts --coverage.extension=tsx `)).toMatchInlineSnapshot(` { @@ -217,3 +221,28 @@ test('cache is parsed correctly', () => { cache: { dir: 'test/cache.json' }, }) }) + +test('browser as implicit boolean', () => { + const { options, args } = parseArguments('--browser', false, true) + expect(options).toEqual({ browser: { enabled: true } }) + expect(args).toEqual([]) +}) + +test('browser as explicit boolean', () => { + const { options, args } = parseArguments('--browser=true', false, true) + expect(options).toEqual({ browser: { enabled: true } }) + expect(args).toEqual([]) +}) + +test('browser as explicit boolean with space', () => { + const { options, args } = parseArguments('--browser true', false, true) + expect(options).toEqual({ browser: { enabled: true } }) + expect(args).toEqual([]) +}) + +test('browser by name', () => { + const { options, args } = parseArguments('--browser=firefox', false, true) + + expect(args).toEqual([]) + expect(options).toEqual({ browser: { enabled: true, name: 'firefox' } }) +})