Skip to content

Commit 61ddeba

Browse files
authoredJan 13, 2023
fix(typecheck): log tests with verbose reporter, correctly show "pass" tests (#2656)
1 parent d3dcbdc commit 61ddeba

File tree

1 file changed

+34
-7
lines changed

1 file changed

+34
-7
lines changed
 

‎packages/vitest/src/typecheck/typechecker.ts

+34-7
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { ExecaChildProcess } from 'execa'
33
import { execa } from 'execa'
44
import { extname, resolve } from 'pathe'
55
import { SourceMapConsumer } from 'source-map'
6-
import { ensurePackageInstalled } from '../utils'
6+
import { ensurePackageInstalled, getTasks } from '../utils'
77
import type { Awaitable, File, ParsedStack, Task, TaskResultPack, TaskState, TscErrorInfo, Vitest } from '../types'
88
import { getRawErrsMapFromTsCompile, getTsconfig } from './parse'
99
import { createIndexMap } from './utils'
@@ -77,6 +77,26 @@ export class Typechecker {
7777
return tests
7878
}
7979

80+
protected markPassed(file: File) {
81+
if (!file.result?.state) {
82+
file.result = {
83+
state: 'pass',
84+
}
85+
}
86+
const markTasks = (tasks: Task[]): void => {
87+
for (const task of tasks) {
88+
if ('tasks' in task)
89+
markTasks(task.tasks)
90+
if (!task.result?.state && task.mode === 'run') {
91+
task.result = {
92+
state: 'pass',
93+
}
94+
}
95+
}
96+
}
97+
markTasks(file.tasks)
98+
}
99+
80100
protected async prepareResults(output: string) {
81101
const typeErrors = await this.parseTscLikeOutput(output)
82102
const testFiles = new Set(this.getFiles())
@@ -91,18 +111,20 @@ export class Typechecker {
91111
const { file, definitions, map, parsed } = this._tests![path]
92112
const errors = typeErrors.get(path)
93113
files.push(file)
94-
if (!errors)
114+
if (!errors) {
115+
this.markPassed(file)
95116
return
117+
}
96118
const sortedDefinitions = [...definitions.sort((a, b) => b.start - a.start)]
97119
// has no map for ".js" files that use // @ts-check
98120
const mapConsumer = map && new SourceMapConsumer(map)
99121
const indexMap = createIndexMap(parsed)
100-
const markFailed = (task: Task) => {
122+
const markState = (task: Task, state: TaskState) => {
101123
task.result = {
102-
state: task.mode === 'run' || task.mode === 'only' ? 'fail' : task.mode,
124+
state: task.mode === 'run' || task.mode === 'only' ? state : task.mode,
103125
}
104126
if (task.suite)
105-
markFailed(task.suite)
127+
markState(task.suite, state)
106128
}
107129
errors.forEach(({ error, originalError }) => {
108130
const originalPos = mapConsumer?.generatedPositionFor({
@@ -121,8 +143,10 @@ export class Typechecker {
121143
}
122144
errors.push(error)
123145
if (state === 'fail' && suite.suite)
124-
markFailed(suite.suite)
146+
markState(suite.suite, 'fail')
125147
})
148+
149+
this.markPassed(file)
126150
})
127151

128152
typeErrors.forEach((errors, path) => {
@@ -247,6 +271,9 @@ export class Typechecker {
247271
}
248272

249273
public getTestPacks() {
250-
return Object.values(this._tests || {}).map(i => [i.file.id, undefined] as TaskResultPack)
274+
return Object.values(this._tests || {})
275+
.map(({ file }) => getTasks(file))
276+
.flat()
277+
.map(i => [i.id, undefined] as TaskResultPack)
251278
}
252279
}

0 commit comments

Comments
 (0)
Please sign in to comment.