Skip to content

Commit ffb53be

Browse files
committed
fix(diagnostic): assign diagnostic to correct test
Ensure that calls to test.diagnostic are reflected on the correct test. Now captures previously-lost top-level diagnostics as well. Fixes #207.
1 parent 4800299 commit ffb53be

File tree

4 files changed

+32
-25
lines changed

4 files changed

+32
-25
lines changed

parse-report.js

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,26 @@ const durationRegex = /duration_ms\s([\d.]+)/
1212
export default async function parseReport(source) {
1313
const tests = []
1414
const testStack = []
15-
16-
let diagnosticMessage = ''
15+
const allTests = Object.create(null)
16+
let currentTest
1717
let totalDuration = 0
1818

19-
function lastTestInStack() {
20-
return testStack.length ? testStack[testStack.length - 1] : null
19+
function testId(data) {
20+
return [data.file, data.line, data.column].join('\0')
2121
}
2222

23-
function appendDiagnosticMessage(message) {
24-
diagnosticMessage += `${message}\n`
23+
function lastTestInStack() {
24+
return testStack.length ? testStack[testStack.length - 1] : null
2525
}
2626

27-
function resetDiagnosticMessage() {
28-
diagnosticMessage = ''
27+
function appendDiagnosticMessage(data) {
28+
// currentTest is for diagnostics after all tests are complete
29+
// which do not have a file, line, or column.
30+
const t = allTests[testId(data)] || currentTest
31+
if (!t.diagnostic) {
32+
t.diagnostic = ''
33+
}
34+
t.diagnostic += `${data.message}\n`
2935
}
3036

3137
function isFileUrl(urlString) {
@@ -52,13 +58,13 @@ export default async function parseReport(source) {
5258
data: { name, file }
5359
} = event
5460

55-
resetDiagnosticMessage()
56-
57-
testStack.push({
61+
const t = {
5862
name,
5963
file: parseFilePath(file),
6064
tests: []
61-
})
65+
}
66+
allTests[testId(event.data)] = t
67+
testStack.push(t)
6268

6369
break
6470

@@ -72,7 +78,7 @@ export default async function parseReport(source) {
7278
}
7379
} = event
7480

75-
const currentTest = testStack.pop()
81+
currentTest = testStack.pop()
7682
currentTest.duration = duration
7783
currentTest.skip = skip !== undefined
7884
currentTest.todo = todo !== undefined
@@ -89,10 +95,6 @@ export default async function parseReport(source) {
8995
}
9096
}
9197

92-
if (diagnosticMessage) {
93-
currentTest.diagnostic = diagnosticMessage
94-
}
95-
9698
if (lastTestInStack()) {
9799
lastTestInStack().tests.push(currentTest)
98100
} else {
@@ -111,7 +113,7 @@ export default async function parseReport(source) {
111113
totalDuration = parseFloat(durationMatch[1])
112114
}
113115

114-
appendDiagnosticMessage(message)
116+
appendDiagnosticMessage(event.data)
115117

116118
break
117119
}

test/e2e/compare.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ set -e
33

44
# Function to replace test duration with 0 and remove file paths
55
remove_variables() {
6-
echo "$1" | sed -E 's/\"duration\": [0-9\.]+/\"duration\": 0/g' | sed -E 's/\/.*\/test\//test\//g'
6+
echo "$1" | sed -E 's/\"duration\": [0-9.]+/\"duration\": 0/g' | sed -E 's/\/.*\/test\//test\//g' | sed -E 's/duration_ms [0-9.]+/duration_ms 0/g'
77
}
88

99
# Run sample tests and generate the report, ignoring errors

test/resources/expected.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
"tests": [],
3232
"duration": 0,
3333
"skip": false,
34-
"todo": false
34+
"todo": false,
35+
"diagnostic": "JJJJAJAJSDADS\n"
3536
},
3637
{
3738
"name": "fails",
@@ -50,7 +51,8 @@
5051
"expected": 2,
5152
"operator": "strictEqual"
5253
}
53-
}
54+
},
55+
"diagnostic": "IIIIOASDASD\n"
5456
}
5557
],
5658
"duration": 0,
@@ -127,8 +129,9 @@
127129
],
128130
"duration": 0,
129131
"skip": false,
130-
"todo": true
132+
"todo": true,
133+
"diagnostic": "tests 6\nsuites 5\npass 2\nfail 2\ncancelled 1\nskipped 1\ntodo 0\nduration_ms 0\n"
131134
}
132135
],
133136
"duration": 0
134-
}
137+
}

test/resources/sample-tests/nested.test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ import { describe, it } from 'node:test'
44
describe('module', () => {
55
describe('function', () => {
66
describe('behavior', () => {
7-
it('asserts 1 === 1', () => {
7+
it('asserts 1 === 1', t => {
8+
t.diagnostic('JJJJAJAJSDADS')
89
assert.strictEqual(1, 1)
910
})
1011

11-
it('fails', () => {
12+
it('fails', t => {
13+
t.diagnostic('IIIIOASDASD')
1214
assert.strictEqual(1, 2)
1315
})
1416
})

0 commit comments

Comments
 (0)