-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
cli.ts
85 lines (74 loc) · 3.06 KB
/
cli.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import cac from 'cac'
import c from 'picocolors'
import { version } from '../../package.json'
import type { CliOptions } from './cli-api'
import { startVitest } from './cli-api'
import { divider } from './reporters/renderers/utils'
const cli = cac('vitest')
cli
.version(version)
.option('-r, --root <path>', 'root path')
.option('-c, --config <path>', 'path to config file')
.option('-u, --update', 'update snapshot')
.option('-w, --watch', 'watch mode')
.option('-t, --testNamePattern <pattern>', 'run tests with full names matching the specified pattern')
.option('--dir <path>', 'base directory to scan for the test files')
.option('--ui', 'enable UI')
.option('--open', 'open UI automatically (default: !process.env.CI))')
.option('--api [api]', 'serve API, available options: --api.port <port>, --api.host [host] and --api.strictPort')
.option('--threads', 'enabled threads (default: true)')
.option('--silent', 'silent console output from tests')
.option('--isolate', 'isolate environment for each test file (default: true)')
.option('--reporter <name>', 'reporter')
.option('--outputTruncateLength <length>', 'diff output length (default: 80)')
.option('--outputDiffLines <lines>', 'number of diff output lines (default: 15)')
.option('--outputFile <filename/-s>', 'write test results to a file when the --reporter=json or --reporter=junit option is also specified, use cac\'s dot notation for individual outputs of mutliple reporters')
.option('--coverage', 'use c8 for coverage')
.option('--run', 'do not watch')
.option('--mode <name>', 'override Vite mode (default: test)')
.option('--globals', 'inject apis globally')
.option('--dom', 'mock browser api with happy-dom')
.option('--environment <env>', 'runner environment (default: node)')
.option('--passWithNoTests', 'pass when no tests found')
.option('--allowOnly', 'Allow tests and suites that are marked as only (default: !process.env.CI)')
.option('--shard <shard>', 'Test suite shard to execute in a format of <index>/<count>')
.option('--changed [since]', 'Run tests that are affected by the changed files (default: false)')
.option('--random', 'Run tests in random order (default: false)')
.help()
cli
.command('run [...filters]')
.action(run)
cli
.command('related [...filters]')
.action(runRelated)
cli
.command('watch [...filters]')
.action(start)
cli
.command('dev [...filters]')
.action(start)
cli
.command('[...filters]')
.action(start)
cli.parse()
async function runRelated(relatedFiles: string[] | string, argv: CliOptions) {
argv.related = relatedFiles
argv.passWithNoTests ??= true
await start([], argv)
}
async function run(cliFilters: string[], options: CliOptions) {
options.run = true
await start(cliFilters, options)
}
async function start(cliFilters: string[], options: CliOptions) {
try {
if (await startVitest(cliFilters, options) === false)
process.exit()
}
catch (e) {
process.exitCode = 1
console.error(`\n${c.red(divider(c.bold(c.inverse(' Unhandled Error '))))}`)
console.error(e)
console.error('\n\n')
}
}