Skip to content

Commit 94968a6

Browse files
authoredJan 11, 2023
feat: display running processes, if vitest closes with timeout (#2633)
* feat: display running processes, if vitest closes with timeout * refactor: move hanging-process to reporter * chore: cleanup
1 parent 1ffb0ef commit 94968a6

File tree

7 files changed

+45
-3
lines changed

7 files changed

+45
-3
lines changed
 

‎docs/config/index.md

+1
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,7 @@ Custom reporters for output. Reporters can be [a Reporter instance](https://gith
364364
- `'junit'` - JUnit XML reporter (you can configure `testsuites` tag name with `VITEST_JUNIT_SUITE_NAME` environmental variable)
365365
- `'json'` - give a simple JSON summary
366366
- `'html'` - outputs HTML report based on [`@vitest/ui`](/guide/ui)
367+
- `'hanging-process'` - displays a list of hanging processes, if Vitest cannot exit process safely. This might be a heavy operation, enable it only if Vitest consistently cannot exit process
367368
- path of a custom reporter (e.g. `'./path/to/reporter.ts'`, `'@scope/reporter'`)
368369

369370
### outputTruncateLength

‎packages/vitest/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@
122122
"tinypool": "^0.3.0",
123123
"tinyspy": "^1.0.2",
124124
"vite": "^3.0.0 || ^4.0.0",
125-
"vite-node": "workspace:*"
125+
"vite-node": "workspace:*",
126+
"why-is-node-running": "^2.2.2"
126127
},
127128
"devDependencies": {
128129
"@antfu/install-pkg": "^0.1.1",

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -553,8 +553,10 @@ export class Vitest {
553553
*/
554554
async exit(force = false) {
555555
setTimeout(() => {
556-
console.warn(`close timed out after ${this.config.teardownTimeout}ms`)
557-
process.exit()
556+
this.report('onProcessTimeout').then(() => {
557+
console.warn(`close timed out after ${this.config.teardownTimeout}ms`)
558+
process.exit()
559+
})
558560
}, this.config.teardownTimeout).unref()
559561

560562
await this.close()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { createRequire } from 'module'
2+
import type { Reporter } from '../../types'
3+
4+
export class HangingProcessReporter implements Reporter {
5+
whyRunning: (() => void) | undefined
6+
7+
onInit(): void {
8+
const _require = createRequire(import.meta.url)
9+
this.whyRunning = _require('why-is-node-running')
10+
}
11+
12+
onProcessTimeout() {
13+
this.whyRunning?.()
14+
}
15+
}

‎packages/vitest/src/node/reporters/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { VerboseReporter } from './verbose'
55
import { TapReporter } from './tap'
66
import { JUnitReporter } from './junit'
77
import { TapFlatReporter } from './tap-flat'
8+
import { HangingProcessReporter } from './hanging-process'
89

910
export { DefaultReporter }
1011

@@ -16,6 +17,7 @@ export const ReportersMap = {
1617
'tap': TapReporter,
1718
'tap-flat': TapFlatReporter,
1819
'junit': JUnitReporter,
20+
'hanging-process': HangingProcessReporter,
1921
}
2022

2123
export type BuiltinReporters = keyof typeof ReportersMap

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

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ export interface Reporter {
1616
onServerRestart?: (reason?: string) => Awaitable<void>
1717

1818
onUserConsoleLog?: (log: UserConsoleLog) => Awaitable<void>
19+
20+
onProcessTimeout?: () => Awaitable<void>
1921
}
2022

2123
export type { Vitest }

‎pnpm-lock.yaml

+19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.