Skip to content

Commit f8ba80f

Browse files
authoredJan 8, 2024
fix(vitest): fix tap reporter to handle custom error (#4897)
1 parent 55f5349 commit f8ba80f

File tree

4 files changed

+62
-4
lines changed

4 files changed

+62
-4
lines changed
 

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

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Task } from '@vitest/runner'
2-
import type { ParsedStack } from '@vitest/utils'
2+
import type { ErrorWithDiff, ParsedStack } from '@vitest/utils'
33
import type { Vitest } from '../../node'
44
import type { Reporter } from '../../types/reporter'
55
import { parseErrorStacktrace } from '../../utils/source-map'
@@ -36,9 +36,10 @@ export class TapReporter implements Reporter {
3636
return ''
3737
}
3838

39-
private logErrorDetails(error: Error, stack?: ParsedStack) {
40-
this.logger.log(`name: ${yamlString(error.name)}`)
41-
this.logger.log(`message: ${yamlString(error.message)}`)
39+
private logErrorDetails(error: ErrorWithDiff, stack?: ParsedStack) {
40+
const errorName = error.name || error.nameStr || 'Unknown Error'
41+
this.logger.log(`name: ${yamlString(String(errorName))}`)
42+
this.logger.log(`message: ${yamlString(String(error.message))}`)
4243

4344
if (stack) {
4445
// For compatibility with tap-mocha-reporter
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { test } from 'vitest';
2+
3+
test('no name object', () => {
4+
throw { noName: 'hi' };
5+
});
6+
7+
test('string', () => {
8+
throw "hi";
9+
});
10+
11+
test('number', () => {
12+
throw 1234;
13+
});
14+
15+
test('number name object', () => {
16+
throw { name: 1234 };
17+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { defineConfig } from 'vitest/config'
2+
3+
export default defineConfig({})

‎test/reporters/tests/tap.test.ts

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { expect, test } from 'vitest'
2+
import { runVitest } from '../../test-utils'
3+
4+
test('handle custom error without name', async () => {
5+
let { stdout, stderr } = await runVitest({ reporters: 'tap-flat', root: './fixtures/custom-error' })
6+
stdout = stdout.replaceAll(/time=(\S*)/g, 'time=[...]') // strip non-deterministic output
7+
expect(stdout).toMatchInlineSnapshot(`
8+
"TAP version 13
9+
1..4
10+
not ok 1 - basic.test.ts > no name object # time=[...]
11+
---
12+
error:
13+
name: "Unknown Error"
14+
message: "undefined"
15+
...
16+
not ok 2 - basic.test.ts > string # time=[...]
17+
---
18+
error:
19+
name: "Unknown Error"
20+
message: "hi"
21+
...
22+
not ok 3 - basic.test.ts > number # time=[...]
23+
---
24+
error:
25+
name: "Unknown Error"
26+
message: "1234"
27+
...
28+
not ok 4 - basic.test.ts > number name object # time=[...]
29+
---
30+
error:
31+
name: "1234"
32+
message: "undefined"
33+
...
34+
"
35+
`)
36+
expect(stderr).toBe('')
37+
})

0 commit comments

Comments
 (0)
Please sign in to comment.