Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9787ded

Browse filesBrowse files
Copilotsheremet-va
andauthored
fix: respect diff config options in soft assertions (#8696)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: sheremet-va <16173870+sheremet-va@users.noreply.github.com> Co-authored-by: Vladimir <sleuths.slews0s@icloud.com>
1 parent 7ad7d39 commit 9787ded
Copy full SHA for 9787ded

6 files changed

+83-1Lines changed: 83 additions & 1 deletion

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎packages/expect/src/utils.ts‎

Copy file name to clipboardExpand all lines: packages/expect/src/utils.ts
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ function handleTestError(test: Test, err: unknown) {
8989
test.result ||= { state: 'fail' }
9090
test.result.state = 'fail'
9191
test.result.errors ||= []
92-
test.result.errors.push(processError(err))
92+
const diffOptions = (globalThis as any).__vitest_worker__?.diffOptions
93+
test.result.errors.push(processError(err, diffOptions))
9394
}
9495

9596
/** wrap assertion function to support `expect.soft` and provide assertion name as `_name` */
Collapse file

‎packages/vitest/src/runtime/runners/index.ts‎

Copy file name to clipboardExpand all lines: packages/vitest/src/runtime/runners/index.ts
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ export async function resolveTestRunner(
6262
])
6363
testRunner.config.diffOptions = diffOptions
6464

65+
// Store diffOptions in the global worker state so they're accessible
66+
// to packages that can't directly import from @vitest/runner (e.g., @vitest/expect)
67+
const workerState = getWorkerState()
68+
workerState.diffOptions = diffOptions
69+
6570
// patch some methods, so custom runners don't need to call RPC
6671
const originalOnTaskUpdate = testRunner.onTaskUpdate
6772
testRunner.onTaskUpdate = async (task, events) => {
Collapse file

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

Copy file name to clipboardExpand all lines: packages/vitest/src/types/worker.ts
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { CancelReason, FileSpecification, Task } from '@vitest/runner'
2+
import type { SerializedDiffOptions } from '@vitest/utils/diff'
23
import type { BirpcReturn } from 'birpc'
34
import type { EvaluatedModules } from 'vite/module-runner'
45
import type { SerializedConfig } from '../runtime/config'
@@ -82,4 +83,5 @@ export interface WorkerGlobalState {
8283
prepare: number
8384
}
8485
onFilterStackTrace?: (trace: string) => string
86+
diffOptions?: SerializedDiffOptions
8587
}
Collapse file
+15Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { expect, test } from 'vitest'
2+
3+
test('soft assertion with custom diff options', () => {
4+
const obj1 = {
5+
obj: { k: 'foo' },
6+
arr: [1, 2],
7+
}
8+
const obj2 = {
9+
obj: { k: 'bar' },
10+
arr: [1, 3],
11+
}
12+
13+
// Use soft assertion to ensure error processing goes through handleTestError
14+
expect.soft(obj1).toEqual(obj2)
15+
})
Collapse file

‎test/config/test/__snapshots__/diff.test.ts.snap‎

Copy file name to clipboardExpand all lines: test/config/test/__snapshots__/diff.test.ts.snap
+28Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,20 @@ exports[`inline diff options: { expand: true } 1`] = `
5151
],
5252
"obj": {
5353
- "k": "bar",
54+
+ "k": "foo",
55+
},
56+
}",
57+
"- Expected
58+
+ Received
59+
60+
{
61+
"arr": [
62+
1,
63+
- 3,
64+
+ 2,
65+
],
66+
"obj": {
67+
- "k": "bar",
5468
+ "k": "foo",
5569
},
5670
}",
@@ -104,6 +118,20 @@ exports[`inline diff options: { printBasicPrototype: true } 1`] = `
104118
],
105119
"obj": Object {
106120
- "k": "bar",
121+
+ "k": "foo",
122+
},
123+
}",
124+
"- Expected
125+
+ Received
126+
127+
Object {
128+
"arr": Array [
129+
1,
130+
- 3,
131+
+ 2,
132+
],
133+
"obj": Object {
134+
- "k": "bar",
107135
+ "k": "foo",
108136
},
109137
}",
Collapse file

‎test/config/test/diff.test.ts‎

Copy file name to clipboardExpand all lines: test/config/test/diff.test.ts
+31Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,34 @@ test.for([
1717
errors.map(e => e.diff && stripVTControlCharacters(e.diff)),
1818
).matchSnapshot()
1919
})
20+
21+
test('soft assertion with printBasicPrototype diff option', async () => {
22+
const { ctx } = await runVitest({
23+
root: './fixtures/diff',
24+
diff: { printBasicPrototype: true },
25+
}, ['soft-assertions.test.ts'])
26+
27+
const errors = ctx!.state.getFiles().flatMap(f =>
28+
f.tasks.flatMap(t => t.result?.errors ?? []),
29+
)
30+
31+
expect(errors.length).toBeGreaterThan(0)
32+
33+
const diff = errors[0].diff && stripVTControlCharacters(errors[0].diff)
34+
expect(diff).toMatchInlineSnapshot(`
35+
"- Expected
36+
+ Received
37+
38+
Object {
39+
"arr": Array [
40+
1,
41+
- 3,
42+
+ 2,
43+
],
44+
"obj": Object {
45+
- "k": "bar",
46+
+ "k": "foo",
47+
},
48+
}"
49+
`)
50+
})

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.