From 8212043eac91630816c030fc0b3b4f234324e3d4 Mon Sep 17 00:00:00 2001 From: tianrking Date: Thu, 16 Jul 2026 19:36:56 +0800 Subject: [PATCH] fix: report TAP timeouts without crashing --- lib/reporters/tap.js | 4 ++- test-tap/reporters/tap.js | 1 + .../reporters/tap.timeoutinsinglefile.v22.log | 27 +++++++++++++++++++ .../reporters/tap.timeoutinsinglefile.v24.log | 27 +++++++++++++++++++ .../reporters/tap.timeoutinsinglefile.v26.log | 27 +++++++++++++++++++ 5 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 test-tap/reporters/tap.timeoutinsinglefile.v22.log create mode 100644 test-tap/reporters/tap.timeoutinsinglefile.v24.log create mode 100644 test-tap/reporters/tap.timeoutinsinglefile.v26.log diff --git a/lib/reporters/tap.js b/lib/reporters/tap.js index 7884db59f..2aea606fd 100644 --- a/lib/reporters/tap.js +++ b/lib/reporters/tap.js @@ -6,6 +6,8 @@ import indentString from 'indent-string'; import plur from 'plur'; import * as supertap from 'supertap'; +import serializeError from '../serialize-error.js'; + import prefixTitle from './prefix-title.js'; function dumpError({ @@ -148,7 +150,7 @@ export default class TapReporter { for (const [testFile, tests] of evt.pendingTests) { for (const title of tests) { - this.writeTest({testFile, title, err: error}, {passed: false, todo: false, skip: false}); + this.writeTest({testFile, title, err: serializeError(error)}, {passed: false, todo: false, skip: false}); } } } diff --git a/test-tap/reporters/tap.js b/test-tap/reporters/tap.js index bac73e913..0ae8eec05 100644 --- a/test-tap/reporters/tap.js +++ b/test-tap/reporters/tap.js @@ -50,4 +50,5 @@ test(async t => { t.test('tap reporter - second failFast run', run('failFast2')); t.test('tap reporter - only run', run('only')); t.test('tap reporter - edge cases', run('edgeCases')); + t.test('tap reporter - timeout', run('timeoutInSingleFile')); }); diff --git a/test-tap/reporters/tap.timeoutinsinglefile.v22.log b/test-tap/reporters/tap.timeoutinsinglefile.v22.log new file mode 100644 index 000000000..8410b42ff --- /dev/null +++ b/test-tap/reporters/tap.timeoutinsinglefile.v22.log @@ -0,0 +1,27 @@ +TAP version 13 +---tty-stream-chunk-separator +ok 1 - passes +---tty-stream-chunk-separator +ok 2 - passes two +---tty-stream-chunk-separator +not ok 3 - slow + --- + name: Error + message: Exited because no new tests completed within the last 2500ms of inactivity + at: 'TapReporter.writeTimeout (/lib/reporters/tap.js)' + ... +---tty-stream-chunk-separator +not ok 4 - slow two + --- + name: Error + message: Exited because no new tests completed within the last 2500ms of inactivity + at: 'TapReporter.writeTimeout (/lib/reporters/tap.js)' + ... +---tty-stream-chunk-separator + +1..4 +# tests 4 +# pass 2 +# fail 2 + +---tty-stream-chunk-separator diff --git a/test-tap/reporters/tap.timeoutinsinglefile.v24.log b/test-tap/reporters/tap.timeoutinsinglefile.v24.log new file mode 100644 index 000000000..8410b42ff --- /dev/null +++ b/test-tap/reporters/tap.timeoutinsinglefile.v24.log @@ -0,0 +1,27 @@ +TAP version 13 +---tty-stream-chunk-separator +ok 1 - passes +---tty-stream-chunk-separator +ok 2 - passes two +---tty-stream-chunk-separator +not ok 3 - slow + --- + name: Error + message: Exited because no new tests completed within the last 2500ms of inactivity + at: 'TapReporter.writeTimeout (/lib/reporters/tap.js)' + ... +---tty-stream-chunk-separator +not ok 4 - slow two + --- + name: Error + message: Exited because no new tests completed within the last 2500ms of inactivity + at: 'TapReporter.writeTimeout (/lib/reporters/tap.js)' + ... +---tty-stream-chunk-separator + +1..4 +# tests 4 +# pass 2 +# fail 2 + +---tty-stream-chunk-separator diff --git a/test-tap/reporters/tap.timeoutinsinglefile.v26.log b/test-tap/reporters/tap.timeoutinsinglefile.v26.log new file mode 100644 index 000000000..8410b42ff --- /dev/null +++ b/test-tap/reporters/tap.timeoutinsinglefile.v26.log @@ -0,0 +1,27 @@ +TAP version 13 +---tty-stream-chunk-separator +ok 1 - passes +---tty-stream-chunk-separator +ok 2 - passes two +---tty-stream-chunk-separator +not ok 3 - slow + --- + name: Error + message: Exited because no new tests completed within the last 2500ms of inactivity + at: 'TapReporter.writeTimeout (/lib/reporters/tap.js)' + ... +---tty-stream-chunk-separator +not ok 4 - slow two + --- + name: Error + message: Exited because no new tests completed within the last 2500ms of inactivity + at: 'TapReporter.writeTimeout (/lib/reporters/tap.js)' + ... +---tty-stream-chunk-separator + +1..4 +# tests 4 +# pass 2 +# fail 2 + +---tty-stream-chunk-separator