test_runner: 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: https://github.com/nodejs/node/pull/44952
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Bryan English 2022-10-26 00:00:13 -04:00 committed by GitHub
parent 0a7ba84335
commit e260b373f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 0 deletions

View File

@ -179,17 +179,30 @@ function jsToYaml(indent, name, value) {
code,
failureType,
message,
expected,
actual,
operator,
stack,
} = value;
let errMsg = message ?? '<unknown error>';
let errStack = stack;
let errCode = code;
let errExpected = expected;
let errActual = actual;
let errOperator = operator;
let errIsAssertion = isAssertionLike(value);
// If the ERR_TEST_FAILURE came from an error provided by user code,
// then try to unwrap the original error message and stack.
if (code === 'ERR_TEST_FAILURE' && kUnwrapErrors.has(failureType)) {
errStack = cause?.stack ?? errStack;
errCode = cause?.code ?? errCode;
if (isAssertionLike(cause)) {
errExpected = cause.expected;
errActual = cause.actual;
errOperator = cause.operator ?? errOperator;
errIsAssertion = true;
}
if (failureType === kTestCodeFailure) {
errMsg = cause?.message ?? errMsg;
}
@ -201,6 +214,14 @@ function jsToYaml(indent, name, value) {
result += jsToYaml(indent, 'code', errCode);
}
if (errIsAssertion) {
result += jsToYaml(indent, 'expected', errExpected);
result += jsToYaml(indent, 'actual', errActual);
if (errOperator) {
result += jsToYaml(indent, 'operator', errOperator);
}
}
if (typeof errStack === 'string') {
const frames = [];
@ -229,4 +250,8 @@ function jsToYaml(indent, name, value) {
return result;
}
function isAssertionLike(value) {
return value && typeof value === 'object' && 'expected' in value && 'actual' in value;
}
module.exports = { TapStream };

View File

@ -123,6 +123,9 @@ not ok 13 - async assertion fail
true !== false
code: 'ERR_ASSERTION'
expected: false
actual: true
operator: 'strictEqual'
stack: |-
*
*

View File

@ -133,6 +133,9 @@ not ok 13 - async assertion fail
true !== false
code: 'ERR_ASSERTION'
expected: false
actual: true
operator: 'strictEqual'
stack: |-
*
*