Skip to content

Commit 2bd8d9d

Browse files
authored
fix: print error properties only in verbose reporter (#5917)
1 parent bc4b607 commit 2bd8d9d

File tree

7 files changed

+54
-7
lines changed

7 files changed

+54
-7
lines changed

packages/vitest/src/node/error.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ interface PrintErrorOptions {
2626
logger: Logger
2727
fullStack?: boolean
2828
showCodeFrame?: boolean
29+
printProperties?: boolean
2930
}
3031

3132
interface PrintErrorResult {
@@ -57,7 +58,7 @@ export function printError(
5758
project: WorkspaceProject | undefined,
5859
options: PrintErrorOptions,
5960
): PrintErrorResult | undefined {
60-
const { showCodeFrame = true, fullStack = false, type } = options
61+
const { showCodeFrame = true, fullStack = false, type, printProperties = true } = options
6162
const logger = options.logger
6263
let e = error as ErrorWithDiff
6364

@@ -109,7 +110,9 @@ export function printError(
109110
}
110111
})
111112

112-
const errorProperties = getErrorProperties(e)
113+
const errorProperties = printProperties
114+
? getErrorProperties(e)
115+
: {}
113116

114117
if (type) {
115118
printErrorType(type, project.ctx)
@@ -350,14 +353,21 @@ export function printStack(
350353
if (stack.length) {
351354
logger.error()
352355
}
353-
const hasProperties = Object.keys(errorProperties).length > 0
354-
if (hasProperties) {
356+
if (hasProperties(errorProperties)) {
355357
logger.error(c.red(c.dim(divider())))
356358
const propertiesString = inspect(errorProperties)
357359
logger.error(c.red(c.bold('Serialized Error:')), c.gray(propertiesString))
358360
}
359361
}
360362

363+
function hasProperties(obj: any) {
364+
// eslint-disable-next-line no-unreachable-loop
365+
for (const _key in obj) {
366+
return true
367+
}
368+
return false
369+
}
370+
361371
export function generateCodeFrame(
362372
source: string,
363373
indent = 0,

packages/vitest/src/node/logger.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ interface ErrorOptions {
1616
type?: string
1717
fullStack?: boolean
1818
project?: WorkspaceProject
19+
verbose?: boolean
1920
}
2021

2122
const ESC = '\x1B['
@@ -89,15 +90,15 @@ export class Logger {
8990

9091
printError(err: unknown, options: ErrorOptions = {}) {
9192
const { fullStack = false, type } = options
92-
const project
93-
= options.project
93+
const project = options.project
9494
?? this.ctx.getCoreWorkspaceProject()
9595
?? this.ctx.projects[0]
9696
printError(err, project, {
9797
fullStack,
9898
type,
9999
showCodeFrame: true,
100100
logger: this,
101+
printProperties: options.verbose,
101102
})
102103
}
103104

packages/vitest/src/node/reporters/base.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ export abstract class BaseReporter implements Reporter {
6565
isTTY: boolean
6666
ctx: Vitest = undefined!
6767

68+
protected verbose = false
69+
6870
private _filesInWatchMode = new Map<string, number>()
6971
private _lastRunTimeout = 0
7072
private _lastRunTimer: NodeJS.Timer | undefined
@@ -601,7 +603,7 @@ export abstract class BaseReporter implements Reporter {
601603
)
602604
}
603605
const project = this.ctx.getProjectByTaskId(tasks[0].id)
604-
this.ctx.logger.printError(error, { project })
606+
this.ctx.logger.printError(error, { project, verbose: this.verbose })
605607
errorDivider()
606608
}
607609
}

packages/vitest/src/node/reporters/verbose.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { DefaultReporter } from './default'
66
import { formatProjectName, getStateSymbol } from './renderers/utils'
77

88
export class VerboseReporter extends DefaultReporter {
9+
protected verbose = true
10+
911
constructor() {
1012
super()
1113
this.rendererOptions.renderSucceed = true
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { test } from 'vitest';
2+
3+
test('throws', () => {
4+
const error = new Error('error with properties')
5+
Object.assign(error, {
6+
code: 404,
7+
status: 'not found',
8+
})
9+
throw error
10+
});
11+

test/reporters/tests/default.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,15 @@ describe('default reporter', async () => {
5757
expect(vitest.stdout).not.toContain('✓ b1 test')
5858
expect(vitest.stdout).not.toContain('✓ b2 test')
5959
})
60+
61+
test('doesn\'t print error properties', async () => {
62+
const result = await runVitest({
63+
root: 'fixtures/error-props',
64+
reporters: 'default',
65+
env: { CI: '1' },
66+
})
67+
68+
expect(result.stderr).not.toContain(`Serialized Error`)
69+
expect(result.stderr).not.toContain(`status: 'not found'`)
70+
})
6071
}, 120000)

test/reporters/tests/verbose.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,13 @@ test('duration', async () => {
1414
✓ basic.test.ts > slow [...]ms
1515
`)
1616
})
17+
18+
test('prints error properties', async () => {
19+
const result = await runVitest({
20+
root: 'fixtures/error-props',
21+
reporters: 'verbose',
22+
env: { CI: '1' },
23+
})
24+
25+
expect(result.stderr).toContain(`Serialized Error: { code: 404, status: 'not found' }`)
26+
})

0 commit comments

Comments
 (0)