Skip to content

Commit 46dce07

Browse files
benglMoLow
authored andcommitted
feat: add extra fields in AssertionError YAML
Many TAP reporters offer special-case handling of YAML objects containing `expected`, `actual`, and `operator` fields, as produced by `AssertionError` and similar userland Error classes. PR-URL: nodejs/node#44952 Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: James M Snell <jasnell@gmail.com> (cherry picked from commit e260b373f13c150eb5bdf4c336d4b6b764b59c8e)
1 parent c5fd64c commit 46dce07

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

lib/internal/test_runner/tap_stream.js

+26-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// https://github.com/nodejs/node/blob/cb7e0c59df10a42cd6930ca7f99d3acee1ce7627/lib/internal/test_runner/tap_stream.js
1+
// https://github.com/nodejs/node/blob/e260b373f13c150eb5bdf4c336d4b6b764b59c8e/lib/internal/test_runner/tap_stream.js
22

33
'use strict'
44

@@ -183,17 +183,30 @@ function jsToYaml (indent, name, value) {
183183
code,
184184
failureType,
185185
message,
186+
expected,
187+
actual,
188+
operator,
186189
stack
187190
} = value
188191
let errMsg = message ?? '<unknown error>'
189192
let errStack = stack
190193
let errCode = code
194+
let errExpected = expected
195+
let errActual = actual
196+
let errOperator = operator
197+
let errIsAssertion = isAssertionLike(value)
191198

192199
// If the ERR_TEST_FAILURE came from an error provided by user code,
193200
// then try to unwrap the original error message and stack.
194201
if (code === 'ERR_TEST_FAILURE' && kUnwrapErrors.has(failureType)) {
195202
errStack = cause?.stack ?? errStack
196203
errCode = cause?.code ?? errCode
204+
if (isAssertionLike(cause)) {
205+
errExpected = cause.expected
206+
errActual = cause.actual
207+
errOperator = cause.operator ?? errOperator
208+
errIsAssertion = true
209+
}
197210
if (failureType === kTestCodeFailure) {
198211
errMsg = cause?.message ?? errMsg
199212
}
@@ -205,6 +218,14 @@ function jsToYaml (indent, name, value) {
205218
result += jsToYaml(indent, 'code', errCode)
206219
}
207220

221+
if (errIsAssertion) {
222+
result += jsToYaml(indent, 'expected', errExpected)
223+
result += jsToYaml(indent, 'actual', errActual)
224+
if (errOperator) {
225+
result += jsToYaml(indent, 'operator', errOperator)
226+
}
227+
}
228+
208229
if (typeof errStack === 'string') {
209230
const frames = []
210231

@@ -233,4 +254,8 @@ function jsToYaml (indent, name, value) {
233254
return result
234255
}
235256

257+
function isAssertionLike (value) {
258+
return value && typeof value === 'object' && 'expected' in value && 'actual' in value
259+
}
260+
236261
module.exports = { TapStream }

test/message/test_runner_desctibe_it.out

+3
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ not ok 13 - async assertion fail
123123
true !== false
124124

125125
code: 'ERR_ASSERTION'
126+
expected: false
127+
actual: true
128+
operator: 'strictEqual'
126129
stack: |-
127130
*
128131
*

test/message/test_runner_output.out

+3
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ not ok 13 - async assertion fail
133133
true !== false
134134

135135
code: 'ERR_ASSERTION'
136+
expected: false
137+
actual: true
138+
operator: 'strictEqual'
136139
stack: |-
137140
*
138141
*

0 commit comments

Comments
 (0)