Skip to content

Commit e1735fb

Browse files
authoredMar 14, 2024
feat(vitest): support clearScreen cli flag (#5241)
1 parent 356db87 commit e1735fb

File tree

6 files changed

+53
-2
lines changed

6 files changed

+53
-2
lines changed
 

‎docs/guide/cli.md

+1
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ Run only [benchmark](https://vitest.dev/guide/features.html#benchmarking-experim
103103
| `--exclude <glob>` | Additional file globs to be excluded from test |
104104
| `--expand-snapshot-diff` | Show full diff when snapshot fails |
105105
| `--disable-console-intercept` | Disable automatic interception of console logging (default: `false`) |
106+
| `--clearScreen` | Clear terminal screen when re-running tests during watch mode (default: `true`) |
106107
| `--typecheck [options]` | Custom options for typecheck pool. If passed without options, enables typechecking |
107108
| `--typecheck.enabled` | Enable typechecking alongside tests (default: `false`) |
108109
| `--typecheck.only` | Run only typecheck tests. This automatically enables typecheck (default: `false`) |

‎packages/vitest/src/node/cli/cli-config.ts

+3
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,9 @@ export const cliOptionsConfig: VitestCLIOptions = {
580580
description: 'Removes colors from the console output',
581581
alias: 'no-color',
582582
},
583+
clearScreen: {
584+
description: 'Clear terminal screen when re-running tests during watch mode (default: true)',
585+
},
583586

584587
// disable CLI options
585588
cliExclude: null,

‎packages/vitest/src/node/config.ts

+2
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ export function resolveConfig(
9494
if (viteConfig.base !== '/')
9595
resolved.base = viteConfig.base
9696

97+
resolved.clearScreen = resolved.clearScreen ?? viteConfig.clearScreen ?? true
98+
9799
if (options.shard) {
98100
if (resolved.watch)
99101
throw new Error('You cannot use --shard option with enabled watch')

‎packages/vitest/src/node/logger.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export class Logger {
5454
}
5555

5656
clearFullScreen(message: string) {
57-
if (this.ctx.server.config.clearScreen === false) {
57+
if (!this.ctx.config.clearScreen) {
5858
this.console.log(message)
5959
return
6060
}
@@ -63,7 +63,7 @@ export class Logger {
6363
}
6464

6565
clearScreen(message: string, force = false) {
66-
if (this.ctx.server.config.clearScreen === false) {
66+
if (!this.ctx.config.clearScreen) {
6767
this.console.log(message)
6868
return
6969
}

‎packages/vitest/src/types/config.ts

+5
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,11 @@ export interface UserConfig extends InlineConfig {
809809
* Additional exclude patterns
810810
*/
811811
cliExclude?: string[]
812+
813+
/**
814+
* Override vite config's clearScreen from cli
815+
*/
816+
clearScreen?: boolean
812817
}
813818

814819
export interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters' | 'browser' | 'coverage' | 'testNamePattern' | 'related' | 'api' | 'reporters' | 'resolveSnapshotPath' | 'benchmark' | 'shard' | 'cache' | 'sequence' | 'typecheck' | 'runner' | 'poolOptions' | 'pool' | 'cliExclude'> {

‎test/core/test/cli-test.test.ts

+40
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { expect, test } from 'vitest'
2+
import { resolveConfig as viteResolveConfig } from 'vite'
3+
import { resolveConfig } from '../../../packages/vitest/src/node/config.js'
24
import { createCLI, parseCLI } from '../../../packages/vitest/src/node/cli/cac.js'
35

46
const vitestCli = createCLI()
@@ -261,6 +263,44 @@ test('browser by name', () => {
261263
expect(options).toEqual({ browser: { enabled: true, name: 'firefox' } })
262264
})
263265

266+
test('clearScreen', async () => {
267+
const examples = [
268+
// vitest cli | vite clearScreen
269+
['--clearScreen', undefined],
270+
['--clearScreen', true],
271+
['--clearScreen', false],
272+
['--no-clearScreen', undefined],
273+
['--no-clearScreen', true],
274+
['--no-clearScreen', false],
275+
['', undefined],
276+
['', true],
277+
['', false],
278+
] as const
279+
const baseViteConfig = await viteResolveConfig({ configFile: false }, 'serve')
280+
const results = examples.map(([vitestClearScreen, viteClearScreen]) => {
281+
const viteConfig = {
282+
...baseViteConfig,
283+
clearScreen: viteClearScreen,
284+
}
285+
const vitestConfig = getCLIOptions(vitestClearScreen)
286+
const config = resolveConfig('test', vitestConfig, viteConfig)
287+
return config.clearScreen
288+
})
289+
expect(results).toMatchInlineSnapshot(`
290+
[
291+
true,
292+
true,
293+
true,
294+
false,
295+
false,
296+
false,
297+
true,
298+
true,
299+
false,
300+
]
301+
`)
302+
})
303+
264304
test('public parseCLI works correctly', () => {
265305
expect(parseCLI('vitest dev')).toEqual({
266306
filter: [],

0 commit comments

Comments
 (0)
Please sign in to comment.