Skip to content

Commit 6c82a95

Browse files
committed
test: add buildTestProjectTree
1 parent 14dd475 commit 6c82a95

File tree

2 files changed

+209
-135
lines changed

2 files changed

+209
-135
lines changed
Lines changed: 195 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -1,148 +1,208 @@
11
import path from 'node:path'
22
import { expect, test } from 'vitest'
3-
import { buildTestTree } from '../../test-utils'
4-
import { runBrowserTests } from './utils'
3+
import { buildTestProjectTree } from '../../test-utils'
4+
import { instances, runBrowserTests } from './utils'
55

66
test('vi.helper hides internal stack traces', async () => {
77
const { results, ctx } = await runBrowserTests({
88
root: './fixtures/assertion-helper',
99
})
1010

11-
for (const testModule of results) {
12-
const tree = buildTestTree([testModule], (testCase) => {
13-
const result = testCase.result()
14-
return result.errors.map((e) => {
15-
const stacks = e.stacks.map(s => ({
16-
...s,
17-
file: path.relative(ctx.config.root, s.file),
18-
}))
19-
return ({ message: e.message, stacks })
20-
})
11+
const projectTree = buildTestProjectTree(results, (testCase) => {
12+
const result = testCase.result()
13+
return result.errors.map((e) => {
14+
const stacks = e.stacks.map(s => ({
15+
...s,
16+
file: path.relative(ctx.config.root, s.file),
17+
}))
18+
return ({ message: e.message, stacks })
2119
})
20+
})
21+
expect(Object.keys(projectTree)).toEqual(instances.map(i => i.browser))
2222

23-
// TODO: branch by provider/browser
24-
switch (testModule.project.name) {
25-
case 'firefox': {
26-
expect.soft(tree).toMatchInlineSnapshot(`
27-
{
28-
"basic.test.ts": {
29-
"async": [
30-
{
31-
"message": "expected 'async' to deeply equal 'x'",
32-
"stacks": [
33-
{
34-
"column": 8,
35-
"file": "basic.test.ts",
36-
"line": 26,
37-
"method": "",
38-
},
39-
],
40-
},
41-
],
42-
"soft": [
43-
{
44-
"message": "expected 'soft' to deeply equal 'x'",
45-
"stacks": [
46-
{
47-
"column": 14,
48-
"file": "basic.test.ts",
49-
"line": 30,
50-
"method": "",
51-
},
52-
],
53-
},
54-
],
55-
"soft async": [
56-
{
57-
"message": "expected 'soft async' to deeply equal 'x'",
58-
"stacks": [
59-
{
60-
"column": 8,
61-
"file": "basic.test.ts",
62-
"line": 34,
63-
"method": "",
64-
},
65-
],
66-
},
67-
],
68-
"sync": [
69-
{
70-
"message": "expected 'sync' to deeply equal 'x'",
71-
"stacks": [
72-
{
73-
"column": 10,
74-
"file": "basic.test.ts",
75-
"line": 22,
76-
"method": "",
77-
},
78-
],
79-
},
80-
],
81-
},
82-
}
83-
`)
84-
break
85-
}
86-
default: {
87-
expect.soft(tree).toMatchInlineSnapshot(`
88-
{
89-
"basic.test.ts": {
90-
"async": [
91-
{
92-
"message": "expected 'async' to deeply equal 'x'",
93-
"stacks": [
94-
{
95-
"column": 2,
96-
"file": "basic.test.ts",
97-
"line": 26,
98-
"method": "",
99-
},
100-
],
101-
},
102-
],
103-
"soft": [
104-
{
105-
"message": "expected 'soft' to deeply equal 'x'",
106-
"stacks": [
107-
{
108-
"column": 2,
109-
"file": "basic.test.ts",
110-
"line": 30,
111-
"method": "",
112-
},
113-
],
114-
},
115-
],
116-
"soft async": [
117-
{
118-
"message": "expected 'soft async' to deeply equal 'x'",
119-
"stacks": [
120-
{
121-
"column": 2,
122-
"file": "basic.test.ts",
123-
"line": 34,
124-
"method": "",
125-
},
126-
],
127-
},
128-
],
129-
"sync": [
130-
{
131-
"message": "expected 'sync' to deeply equal 'x'",
132-
"stacks": [
133-
{
134-
"column": 2,
135-
"file": "basic.test.ts",
136-
"line": 22,
137-
"method": "",
138-
},
139-
],
140-
},
141-
],
142-
},
143-
}
144-
`)
145-
}
23+
for (const [name, tree] of Object.entries(projectTree)) {
24+
if (name === 'firefox') {
25+
expect.soft(tree).toMatchInlineSnapshot(`
26+
{
27+
"basic.test.ts": {
28+
"async": [
29+
{
30+
"message": "expected 'async' to deeply equal 'x'",
31+
"stacks": [
32+
{
33+
"column": 8,
34+
"file": "basic.test.ts",
35+
"line": 26,
36+
"method": "",
37+
},
38+
],
39+
},
40+
],
41+
"soft": [
42+
{
43+
"message": "expected 'soft' to deeply equal 'x'",
44+
"stacks": [
45+
{
46+
"column": 14,
47+
"file": "basic.test.ts",
48+
"line": 30,
49+
"method": "",
50+
},
51+
],
52+
},
53+
],
54+
"soft async": [
55+
{
56+
"message": "expected 'soft async' to deeply equal 'x'",
57+
"stacks": [
58+
{
59+
"column": 8,
60+
"file": "basic.test.ts",
61+
"line": 34,
62+
"method": "",
63+
},
64+
],
65+
},
66+
],
67+
"sync": [
68+
{
69+
"message": "expected 'sync' to deeply equal 'x'",
70+
"stacks": [
71+
{
72+
"column": 10,
73+
"file": "basic.test.ts",
74+
"line": 22,
75+
"method": "",
76+
},
77+
],
78+
},
79+
],
80+
},
81+
}
82+
`)
83+
}
84+
else if (name === 'webkit') {
85+
// async stack trace is incomplete on webkit
86+
// waiting for https://github.com/WebKit/WebKit/pull/57832 to land on playwright
87+
// bun has already landed https://github.com/oven-sh/bun/pull/22517
88+
expect.soft(tree).toMatchInlineSnapshot(`
89+
{
90+
"basic.test.ts": {
91+
"async": [
92+
{
93+
"message": "expected 'async' to deeply equal 'x'",
94+
"stacks": [
95+
{
96+
"column": 20,
97+
"file": "basic.test.ts",
98+
"line": 9,
99+
"method": "",
100+
},
101+
],
102+
},
103+
],
104+
"soft": [
105+
{
106+
"message": "expected 'soft' to deeply equal 'x'",
107+
"stacks": [
108+
{
109+
"column": 14,
110+
"file": "basic.test.ts",
111+
"line": 30,
112+
"method": "",
113+
},
114+
],
115+
},
116+
],
117+
"soft async": [
118+
{
119+
"message": "expected 'soft async' to deeply equal 'x'",
120+
"stacks": [
121+
{
122+
"column": 25,
123+
"file": "basic.test.ts",
124+
"line": 18,
125+
"method": "",
126+
},
127+
],
128+
},
129+
],
130+
"sync": [
131+
{
132+
"message": "expected 'sync' to deeply equal 'x'",
133+
"stacks": [
134+
{
135+
"column": 10,
136+
"file": "basic.test.ts",
137+
"line": 22,
138+
"method": "",
139+
},
140+
],
141+
},
142+
],
143+
},
144+
}
145+
`)
146+
}
147+
else {
148+
expect.soft(tree).toMatchInlineSnapshot(`
149+
{
150+
"basic.test.ts": {
151+
"async": [
152+
{
153+
"message": "expected 'async' to deeply equal 'x'",
154+
"stacks": [
155+
{
156+
"column": 2,
157+
"file": "basic.test.ts",
158+
"line": 26,
159+
"method": "",
160+
},
161+
],
162+
},
163+
],
164+
"soft": [
165+
{
166+
"message": "expected 'soft' to deeply equal 'x'",
167+
"stacks": [
168+
{
169+
"column": 2,
170+
"file": "basic.test.ts",
171+
"line": 30,
172+
"method": "",
173+
},
174+
],
175+
},
176+
],
177+
"soft async": [
178+
{
179+
"message": "expected 'soft async' to deeply equal 'x'",
180+
"stacks": [
181+
{
182+
"column": 2,
183+
"file": "basic.test.ts",
184+
"line": 34,
185+
"method": "",
186+
},
187+
],
188+
},
189+
],
190+
"sync": [
191+
{
192+
"message": "expected 'sync' to deeply equal 'x'",
193+
"stacks": [
194+
{
195+
"column": 2,
196+
"file": "basic.test.ts",
197+
"line": 22,
198+
"method": "",
199+
},
200+
],
201+
},
202+
],
203+
},
204+
}
205+
`)
146206
}
147207
}
148208
})

test/test-utils/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,3 +599,17 @@ export function buildTestTree(testModules: TestModule[], onTestCase?: (result: T
599599

600600
return tree
601601
}
602+
603+
export function buildTestProjectTree(testModules: TestModule[], onTestCase?: (result: TestCase) => unknown) {
604+
const projectTree: Record<string, Record<string, any>> = {}
605+
606+
for (const testModule of testModules) {
607+
const projectName = testModule.project.name
608+
projectTree[projectName] = {
609+
...projectTree[projectName],
610+
...buildTestTree([testModule], onTestCase),
611+
}
612+
}
613+
614+
return projectTree
615+
}

0 commit comments

Comments
 (0)