test_runner: remove failure attribute in junit_report testcase element - #59685

Open
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element
Open

test_runner: remove failure attribute in junit_report testcase element#59685
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element

Conversation

@devholic22

@devholic22devholic22 commented Aug 30, 2025

Copy link
Copy Markdown

Fixes: #59593

This PR aligns the Node.js test runner’s JUnit XML output with the official JUnit specification by removing the non-standard failure attribute from elements and replacing it with a proper nested tag.

Changes

• Remove non-compliant failure attribute from elements
• Update snapshot tests accordingly

Background

The JUnit XML specification mandates that failure details must be represented via a nested (child) <failure> element inside a <testcase>, rather than as an attribute.

스크린샷 2025-08-30 오후 4 39 27

However, the Node.js test runner previously:
• Incorrectly embedded the failure message as a failure="..." attribute on , which is not spec-compliant
• This caused compatibility issues with tools like GitLab, Jenkins, or any CI/CD pipeline that parses JUnit reports strictly

Before:

<testcase name="testName" time="0.002234" classname="test" failure="The value must be 01 !== 0">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

After:

<testcase name="testName" time="0.002234" classname="test">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

Testing

스크린샷 2025-08-30 오후 4 06 57
  • All existing tests pass

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-botnodejs-github-bot added needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem. labels Aug 30, 2025
children: [inspectWithNoCustomRetry(error, inspectOptions)],
});
currentTest.failures = 1;
currentTest.attrs.failure = error?.message ?? '';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the change the good, I wonder if we have to treat this as potentially breaking? @nodejs/test_runner @nodejs/tsc any thoughts? I'm fine landing as a semver-patch but want to be sure.

@MoLowMoLow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. also not sure rgarding semver-major vs patch

@lpincalpinca added the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@codecov

codecovBot commented Sep 1, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.13%. Comparing base (cc60845) to head (7cca5c1).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #59685 +/- ##
=======================================
Coverage 90.13% 90.13% =======================================
Files 752 752 Lines 251820 251819 -1 Branches 47352 47353 +1 =======================================
+ Hits 226974 226983 +9 - Misses 16158 16174 +16 + Partials 8688 8662 -26 
Files with missing linesCoverage Δ
lib/internal/test_runner/reporter/junit.js95.32% <ø> (+0.55%)⬆️

... and 47 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@CuriousStork

Copy link
Copy Markdown

Hello @atlowChemi

#59593 is auto-closed because #60274 has been merged, thank you.

Probably this PR also needs a ping, or should we reopen the issue #59593?

@mcollina

Copy link
Copy Markdown
Member

The commit message here needs an amend

@CuriousStork

Copy link
Copy Markdown

Hello @devholic22

Are you planning to amend the commit message? Thank you.

@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been marked as stale due to 90 days of inactivity.
It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.

@github-actionsgithub-actionsBot added the stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. label Jul 28, 2026
@CuriousStork

Copy link
Copy Markdown

@jasnell@mcollina@MoLow Hi! Since the original author has been inactive for a while, could one of the collaborators please amend the commit message and land this on their behalf?

This is a useful fix for #59593 to keep the JUnit output spec-compliant, and it already has 5 approvals. Thanks!

This commit aligns the Node.js test runner’s JUnit XML output with the
official JUnit specification by removing the non-standard failure
attribute from elements and replacing it with a proper nested tag.
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@aduh95aduh95 added author ready PRs with CI started, the required approvals, and no outstanding review comments. and removed stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. labels Aug 17, 2026
@CuriousStork

Copy link
Copy Markdown

@aduh95 Hi! It looks like the CI jobs have been stuck in pending for more than a week. Could you please re-trigger the run when you have a moment? Thanks!

@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 31, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-ciPRs that need a full CI run.test_runnerIssues and PRs related to the test runner subsystem.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JUnit XML failure element and attribute are incorrect when using node:assert

11 participants

@devholic22@nodejs-github-bot@CuriousStork@mcollina@jasnell@benjamingr@lpinca@MoLow@atlowChemi@panva@aduh95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

test_runner: remove failure attribute in junit_report testcase element - #59685

Open
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element
Open

test_runner: remove failure attribute in junit_report testcase element#59685
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element

Conversation

@devholic22

@devholic22devholic22 commented Aug 30, 2025

Copy link
Copy Markdown

Fixes: #59593

This PR aligns the Node.js test runner’s JUnit XML output with the official JUnit specification by removing the non-standard failure attribute from elements and replacing it with a proper nested tag.

Changes

• Remove non-compliant failure attribute from elements
• Update snapshot tests accordingly

Background

The JUnit XML specification mandates that failure details must be represented via a nested (child) <failure> element inside a <testcase>, rather than as an attribute.

스크린샷 2025-08-30 오후 4 39 27

However, the Node.js test runner previously:
• Incorrectly embedded the failure message as a failure="..." attribute on , which is not spec-compliant
• This caused compatibility issues with tools like GitLab, Jenkins, or any CI/CD pipeline that parses JUnit reports strictly

Before:

<testcase name="testName" time="0.002234" classname="test" failure="The value must be 01 !== 0">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

After:

<testcase name="testName" time="0.002234" classname="test">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

Testing

스크린샷 2025-08-30 오후 4 06 57
  • All existing tests pass

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-botnodejs-github-bot added needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem. labels Aug 30, 2025
children: [inspectWithNoCustomRetry(error, inspectOptions)],
});
currentTest.failures = 1;
currentTest.attrs.failure = error?.message ?? '';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the change the good, I wonder if we have to treat this as potentially breaking? @nodejs/test_runner @nodejs/tsc any thoughts? I'm fine landing as a semver-patch but want to be sure.

@MoLowMoLow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. also not sure rgarding semver-major vs patch

@lpincalpinca added the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@codecov

codecovBot commented Sep 1, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.13%. Comparing base (cc60845) to head (7cca5c1).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #59685 +/- ##
=======================================
Coverage 90.13% 90.13% =======================================
Files 752 752 Lines 251820 251819 -1 Branches 47352 47353 +1 =======================================
+ Hits 226974 226983 +9 - Misses 16158 16174 +16 + Partials 8688 8662 -26 
Files with missing linesCoverage Δ
lib/internal/test_runner/reporter/junit.js95.32% <ø> (+0.55%)⬆️

... and 47 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@CuriousStork

Copy link
Copy Markdown

Hello @atlowChemi

#59593 is auto-closed because #60274 has been merged, thank you.

Probably this PR also needs a ping, or should we reopen the issue #59593?

@mcollina

Copy link
Copy Markdown
Member

The commit message here needs an amend

@CuriousStork

Copy link
Copy Markdown

Hello @devholic22

Are you planning to amend the commit message? Thank you.

@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been marked as stale due to 90 days of inactivity.
It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.

@github-actionsgithub-actionsBot added the stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. label Jul 28, 2026
@CuriousStork

Copy link
Copy Markdown

@jasnell@mcollina@MoLow Hi! Since the original author has been inactive for a while, could one of the collaborators please amend the commit message and land this on their behalf?

This is a useful fix for #59593 to keep the JUnit output spec-compliant, and it already has 5 approvals. Thanks!

This commit aligns the Node.js test runner’s JUnit XML output with the
official JUnit specification by removing the non-standard failure
attribute from elements and replacing it with a proper nested tag.
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@aduh95aduh95 added author ready PRs with CI started, the required approvals, and no outstanding review comments. and removed stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. labels Aug 17, 2026
@CuriousStork

Copy link
Copy Markdown

@aduh95 Hi! It looks like the CI jobs have been stuck in pending for more than a week. Could you please re-trigger the run when you have a moment? Thanks!

@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 31, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-ciPRs that need a full CI run.test_runnerIssues and PRs related to the test runner subsystem.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JUnit XML failure element and attribute are incorrect when using node:assert

11 participants

@devholic22@nodejs-github-bot@CuriousStork@mcollina@jasnell@benjamingr@lpinca@MoLow@atlowChemi@panva@aduh95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test_runner: remove failure attribute in junit_report testcase element - #59685

Open
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element
Open

test_runner: remove failure attribute in junit_report testcase element#59685
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element

Conversation

@devholic22

@devholic22devholic22 commented Aug 30, 2025

Copy link
Copy Markdown

Fixes: #59593

This PR aligns the Node.js test runner’s JUnit XML output with the official JUnit specification by removing the non-standard failure attribute from elements and replacing it with a proper nested tag.

Changes

• Remove non-compliant failure attribute from elements
• Update snapshot tests accordingly

Background

The JUnit XML specification mandates that failure details must be represented via a nested (child) <failure> element inside a <testcase>, rather than as an attribute.

스크린샷 2025-08-30 오후 4 39 27

However, the Node.js test runner previously:
• Incorrectly embedded the failure message as a failure="..." attribute on , which is not spec-compliant
• This caused compatibility issues with tools like GitLab, Jenkins, or any CI/CD pipeline that parses JUnit reports strictly

Before:

<testcase name="testName" time="0.002234" classname="test" failure="The value must be 01 !== 0">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

After:

<testcase name="testName" time="0.002234" classname="test">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

Testing

스크린샷 2025-08-30 오후 4 06 57
  • All existing tests pass

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-botnodejs-github-bot added needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem. labels Aug 30, 2025
children: [inspectWithNoCustomRetry(error, inspectOptions)],
});
currentTest.failures = 1;
currentTest.attrs.failure = error?.message ?? '';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the change the good, I wonder if we have to treat this as potentially breaking? @nodejs/test_runner @nodejs/tsc any thoughts? I'm fine landing as a semver-patch but want to be sure.

@MoLowMoLow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. also not sure rgarding semver-major vs patch

@lpincalpinca added the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@codecov

codecovBot commented Sep 1, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.13%. Comparing base (cc60845) to head (7cca5c1).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #59685 +/- ##
=======================================
Coverage 90.13% 90.13% =======================================
Files 752 752 Lines 251820 251819 -1 Branches 47352 47353 +1 =======================================
+ Hits 226974 226983 +9 - Misses 16158 16174 +16 + Partials 8688 8662 -26 
Files with missing linesCoverage Δ
lib/internal/test_runner/reporter/junit.js95.32% <ø> (+0.55%)⬆️

... and 47 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@CuriousStork

Copy link
Copy Markdown

Hello @atlowChemi

#59593 is auto-closed because #60274 has been merged, thank you.

Probably this PR also needs a ping, or should we reopen the issue #59593?

@mcollina

Copy link
Copy Markdown
Member

The commit message here needs an amend

@CuriousStork

Copy link
Copy Markdown

Hello @devholic22

Are you planning to amend the commit message? Thank you.

@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been marked as stale due to 90 days of inactivity.
It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.

@github-actionsgithub-actionsBot added the stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. label Jul 28, 2026
@CuriousStork

Copy link
Copy Markdown

@jasnell@mcollina@MoLow Hi! Since the original author has been inactive for a while, could one of the collaborators please amend the commit message and land this on their behalf?

This is a useful fix for #59593 to keep the JUnit output spec-compliant, and it already has 5 approvals. Thanks!

This commit aligns the Node.js test runner’s JUnit XML output with the
official JUnit specification by removing the non-standard failure
attribute from elements and replacing it with a proper nested tag.
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@aduh95aduh95 added author ready PRs with CI started, the required approvals, and no outstanding review comments. and removed stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. labels Aug 17, 2026
@CuriousStork

Copy link
Copy Markdown

@aduh95 Hi! It looks like the CI jobs have been stuck in pending for more than a week. Could you please re-trigger the run when you have a moment? Thanks!

@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 31, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-ciPRs that need a full CI run.test_runnerIssues and PRs related to the test runner subsystem.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JUnit XML failure element and attribute are incorrect when using node:assert

11 participants

@devholic22@nodejs-github-bot@CuriousStork@mcollina@jasnell@benjamingr@lpinca@MoLow@atlowChemi@panva@aduh95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test_runner: remove failure attribute in junit_report testcase element - #59685

Open
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element
Open

test_runner: remove failure attribute in junit_report testcase element#59685
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element

Conversation

@devholic22

@devholic22devholic22 commented Aug 30, 2025

Copy link
Copy Markdown

Fixes: #59593

This PR aligns the Node.js test runner’s JUnit XML output with the official JUnit specification by removing the non-standard failure attribute from elements and replacing it with a proper nested tag.

Changes

• Remove non-compliant failure attribute from elements
• Update snapshot tests accordingly

Background

The JUnit XML specification mandates that failure details must be represented via a nested (child) <failure> element inside a <testcase>, rather than as an attribute.

스크린샷 2025-08-30 오후 4 39 27

However, the Node.js test runner previously:
• Incorrectly embedded the failure message as a failure="..." attribute on , which is not spec-compliant
• This caused compatibility issues with tools like GitLab, Jenkins, or any CI/CD pipeline that parses JUnit reports strictly

Before:

<testcase name="testName" time="0.002234" classname="test" failure="The value must be 01 !== 0">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

After:

<testcase name="testName" time="0.002234" classname="test">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

Testing

스크린샷 2025-08-30 오후 4 06 57
  • All existing tests pass

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-botnodejs-github-bot added needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem. labels Aug 30, 2025
children: [inspectWithNoCustomRetry(error, inspectOptions)],
});
currentTest.failures = 1;
currentTest.attrs.failure = error?.message ?? '';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the change the good, I wonder if we have to treat this as potentially breaking? @nodejs/test_runner @nodejs/tsc any thoughts? I'm fine landing as a semver-patch but want to be sure.

@MoLowMoLow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. also not sure rgarding semver-major vs patch

@lpincalpinca added the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@codecov

codecovBot commented Sep 1, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.13%. Comparing base (cc60845) to head (7cca5c1).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #59685 +/- ##
=======================================
Coverage 90.13% 90.13% =======================================
Files 752 752 Lines 251820 251819 -1 Branches 47352 47353 +1 =======================================
+ Hits 226974 226983 +9 - Misses 16158 16174 +16 + Partials 8688 8662 -26 
Files with missing linesCoverage Δ
lib/internal/test_runner/reporter/junit.js95.32% <ø> (+0.55%)⬆️

... and 47 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@CuriousStork

Copy link
Copy Markdown

Hello @atlowChemi

#59593 is auto-closed because #60274 has been merged, thank you.

Probably this PR also needs a ping, or should we reopen the issue #59593?

@mcollina

Copy link
Copy Markdown
Member

The commit message here needs an amend

@CuriousStork

Copy link
Copy Markdown

Hello @devholic22

Are you planning to amend the commit message? Thank you.

@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been marked as stale due to 90 days of inactivity.
It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.

@github-actionsgithub-actionsBot added the stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. label Jul 28, 2026
@CuriousStork

Copy link
Copy Markdown

@jasnell@mcollina@MoLow Hi! Since the original author has been inactive for a while, could one of the collaborators please amend the commit message and land this on their behalf?

This is a useful fix for #59593 to keep the JUnit output spec-compliant, and it already has 5 approvals. Thanks!

This commit aligns the Node.js test runner’s JUnit XML output with the
official JUnit specification by removing the non-standard failure
attribute from elements and replacing it with a proper nested tag.
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@aduh95aduh95 added author ready PRs with CI started, the required approvals, and no outstanding review comments. and removed stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. labels Aug 17, 2026
@CuriousStork

Copy link
Copy Markdown

@aduh95 Hi! It looks like the CI jobs have been stuck in pending for more than a week. Could you please re-trigger the run when you have a moment? Thanks!

@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 31, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-ciPRs that need a full CI run.test_runnerIssues and PRs related to the test runner subsystem.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JUnit XML failure element and attribute are incorrect when using node:assert

11 participants

@devholic22@nodejs-github-bot@CuriousStork@mcollina@jasnell@benjamingr@lpinca@MoLow@atlowChemi@panva@aduh95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

test_runner: remove failure attribute in junit_report testcase element - #59685

Open
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element
Open

test_runner: remove failure attribute in junit_report testcase element#59685
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element

Conversation

@devholic22

@devholic22devholic22 commented Aug 30, 2025

Copy link
Copy Markdown

Fixes: #59593

This PR aligns the Node.js test runner’s JUnit XML output with the official JUnit specification by removing the non-standard failure attribute from elements and replacing it with a proper nested tag.

Changes

• Remove non-compliant failure attribute from elements
• Update snapshot tests accordingly

Background

The JUnit XML specification mandates that failure details must be represented via a nested (child) <failure> element inside a <testcase>, rather than as an attribute.

스크린샷 2025-08-30 오후 4 39 27

However, the Node.js test runner previously:
• Incorrectly embedded the failure message as a failure="..." attribute on , which is not spec-compliant
• This caused compatibility issues with tools like GitLab, Jenkins, or any CI/CD pipeline that parses JUnit reports strictly

Before:

<testcase name="testName" time="0.002234" classname="test" failure="The value must be 01 !== 0">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

After:

<testcase name="testName" time="0.002234" classname="test">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

Testing

스크린샷 2025-08-30 오후 4 06 57
  • All existing tests pass

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-botnodejs-github-bot added needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem. labels Aug 30, 2025
children: [inspectWithNoCustomRetry(error, inspectOptions)],
});
currentTest.failures = 1;
currentTest.attrs.failure = error?.message ?? '';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the change the good, I wonder if we have to treat this as potentially breaking? @nodejs/test_runner @nodejs/tsc any thoughts? I'm fine landing as a semver-patch but want to be sure.

@MoLowMoLow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. also not sure rgarding semver-major vs patch

@lpincalpinca added the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@codecov

codecovBot commented Sep 1, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.13%. Comparing base (cc60845) to head (7cca5c1).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #59685 +/- ##
=======================================
Coverage 90.13% 90.13% =======================================
Files 752 752 Lines 251820 251819 -1 Branches 47352 47353 +1 =======================================
+ Hits 226974 226983 +9 - Misses 16158 16174 +16 + Partials 8688 8662 -26 
Files with missing linesCoverage Δ
lib/internal/test_runner/reporter/junit.js95.32% <ø> (+0.55%)⬆️

... and 47 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@CuriousStork

Copy link
Copy Markdown

Hello @atlowChemi

#59593 is auto-closed because #60274 has been merged, thank you.

Probably this PR also needs a ping, or should we reopen the issue #59593?

@mcollina

Copy link
Copy Markdown
Member

The commit message here needs an amend

@CuriousStork

Copy link
Copy Markdown

Hello @devholic22

Are you planning to amend the commit message? Thank you.

@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been marked as stale due to 90 days of inactivity.
It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.

@github-actionsgithub-actionsBot added the stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. label Jul 28, 2026
@CuriousStork

Copy link
Copy Markdown

@jasnell@mcollina@MoLow Hi! Since the original author has been inactive for a while, could one of the collaborators please amend the commit message and land this on their behalf?

This is a useful fix for #59593 to keep the JUnit output spec-compliant, and it already has 5 approvals. Thanks!

This commit aligns the Node.js test runner’s JUnit XML output with the
official JUnit specification by removing the non-standard failure
attribute from elements and replacing it with a proper nested tag.
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@aduh95aduh95 added author ready PRs with CI started, the required approvals, and no outstanding review comments. and removed stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. labels Aug 17, 2026
@CuriousStork

Copy link
Copy Markdown

@aduh95 Hi! It looks like the CI jobs have been stuck in pending for more than a week. Could you please re-trigger the run when you have a moment? Thanks!

@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 31, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-ciPRs that need a full CI run.test_runnerIssues and PRs related to the test runner subsystem.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JUnit XML failure element and attribute are incorrect when using node:assert

11 participants

@devholic22@nodejs-github-bot@CuriousStork@mcollina@jasnell@benjamingr@lpinca@MoLow@atlowChemi@panva@aduh95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test_runner: remove failure attribute in junit_report testcase element - #59685

Open
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element
Open

test_runner: remove failure attribute in junit_report testcase element#59685
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element

Conversation

@devholic22

@devholic22devholic22 commented Aug 30, 2025

Copy link
Copy Markdown

Fixes: #59593

This PR aligns the Node.js test runner’s JUnit XML output with the official JUnit specification by removing the non-standard failure attribute from elements and replacing it with a proper nested tag.

Changes

• Remove non-compliant failure attribute from elements
• Update snapshot tests accordingly

Background

The JUnit XML specification mandates that failure details must be represented via a nested (child) <failure> element inside a <testcase>, rather than as an attribute.

스크린샷 2025-08-30 오후 4 39 27

However, the Node.js test runner previously:
• Incorrectly embedded the failure message as a failure="..." attribute on , which is not spec-compliant
• This caused compatibility issues with tools like GitLab, Jenkins, or any CI/CD pipeline that parses JUnit reports strictly

Before:

<testcase name="testName" time="0.002234" classname="test" failure="The value must be 01 !== 0">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

After:

<testcase name="testName" time="0.002234" classname="test">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

Testing

스크린샷 2025-08-30 오후 4 06 57
  • All existing tests pass

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-botnodejs-github-bot added needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem. labels Aug 30, 2025
children: [inspectWithNoCustomRetry(error, inspectOptions)],
});
currentTest.failures = 1;
currentTest.attrs.failure = error?.message ?? '';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the change the good, I wonder if we have to treat this as potentially breaking? @nodejs/test_runner @nodejs/tsc any thoughts? I'm fine landing as a semver-patch but want to be sure.

@MoLowMoLow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. also not sure rgarding semver-major vs patch

@lpincalpinca added the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@codecov

codecovBot commented Sep 1, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.13%. Comparing base (cc60845) to head (7cca5c1).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #59685 +/- ##
=======================================
Coverage 90.13% 90.13% =======================================
Files 752 752 Lines 251820 251819 -1 Branches 47352 47353 +1 =======================================
+ Hits 226974 226983 +9 - Misses 16158 16174 +16 + Partials 8688 8662 -26 
Files with missing linesCoverage Δ
lib/internal/test_runner/reporter/junit.js95.32% <ø> (+0.55%)⬆️

... and 47 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@CuriousStork

Copy link
Copy Markdown

Hello @atlowChemi

#59593 is auto-closed because #60274 has been merged, thank you.

Probably this PR also needs a ping, or should we reopen the issue #59593?

@mcollina

Copy link
Copy Markdown
Member

The commit message here needs an amend

@CuriousStork

Copy link
Copy Markdown

Hello @devholic22

Are you planning to amend the commit message? Thank you.

@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been marked as stale due to 90 days of inactivity.
It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.

@github-actionsgithub-actionsBot added the stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. label Jul 28, 2026
@CuriousStork

Copy link
Copy Markdown

@jasnell@mcollina@MoLow Hi! Since the original author has been inactive for a while, could one of the collaborators please amend the commit message and land this on their behalf?

This is a useful fix for #59593 to keep the JUnit output spec-compliant, and it already has 5 approvals. Thanks!

This commit aligns the Node.js test runner’s JUnit XML output with the
official JUnit specification by removing the non-standard failure
attribute from elements and replacing it with a proper nested tag.
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@aduh95aduh95 added author ready PRs with CI started, the required approvals, and no outstanding review comments. and removed stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. labels Aug 17, 2026
@CuriousStork

Copy link
Copy Markdown

@aduh95 Hi! It looks like the CI jobs have been stuck in pending for more than a week. Could you please re-trigger the run when you have a moment? Thanks!

@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 31, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-ciPRs that need a full CI run.test_runnerIssues and PRs related to the test runner subsystem.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JUnit XML failure element and attribute are incorrect when using node:assert

11 participants

@devholic22@nodejs-github-bot@CuriousStork@mcollina@jasnell@benjamingr@lpinca@MoLow@atlowChemi@panva@aduh95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test_runner: remove failure attribute in junit_report testcase element - #59685

Open
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element
Open

test_runner: remove failure attribute in junit_report testcase element#59685
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element

Conversation

@devholic22

@devholic22devholic22 commented Aug 30, 2025

Copy link
Copy Markdown

Fixes: #59593

This PR aligns the Node.js test runner’s JUnit XML output with the official JUnit specification by removing the non-standard failure attribute from elements and replacing it with a proper nested tag.

Changes

• Remove non-compliant failure attribute from elements
• Update snapshot tests accordingly

Background

The JUnit XML specification mandates that failure details must be represented via a nested (child) <failure> element inside a <testcase>, rather than as an attribute.

스크린샷 2025-08-30 오후 4 39 27

However, the Node.js test runner previously:
• Incorrectly embedded the failure message as a failure="..." attribute on , which is not spec-compliant
• This caused compatibility issues with tools like GitLab, Jenkins, or any CI/CD pipeline that parses JUnit reports strictly

Before:

<testcase name="testName" time="0.002234" classname="test" failure="The value must be 01 !== 0">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

After:

<testcase name="testName" time="0.002234" classname="test">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

Testing

스크린샷 2025-08-30 오후 4 06 57
  • All existing tests pass

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-botnodejs-github-bot added needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem. labels Aug 30, 2025
children: [inspectWithNoCustomRetry(error, inspectOptions)],
});
currentTest.failures = 1;
currentTest.attrs.failure = error?.message ?? '';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the change the good, I wonder if we have to treat this as potentially breaking? @nodejs/test_runner @nodejs/tsc any thoughts? I'm fine landing as a semver-patch but want to be sure.

@MoLowMoLow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. also not sure rgarding semver-major vs patch

@lpincalpinca added the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@codecov

codecovBot commented Sep 1, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.13%. Comparing base (cc60845) to head (7cca5c1).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #59685 +/- ##
=======================================
Coverage 90.13% 90.13% =======================================
Files 752 752 Lines 251820 251819 -1 Branches 47352 47353 +1 =======================================
+ Hits 226974 226983 +9 - Misses 16158 16174 +16 + Partials 8688 8662 -26 
Files with missing linesCoverage Δ
lib/internal/test_runner/reporter/junit.js95.32% <ø> (+0.55%)⬆️

... and 47 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@CuriousStork

Copy link
Copy Markdown

Hello @atlowChemi

#59593 is auto-closed because #60274 has been merged, thank you.

Probably this PR also needs a ping, or should we reopen the issue #59593?

@mcollina

Copy link
Copy Markdown
Member

The commit message here needs an amend

@CuriousStork

Copy link
Copy Markdown

Hello @devholic22

Are you planning to amend the commit message? Thank you.

@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been marked as stale due to 90 days of inactivity.
It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.

@github-actionsgithub-actionsBot added the stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. label Jul 28, 2026
@CuriousStork

Copy link
Copy Markdown

@jasnell@mcollina@MoLow Hi! Since the original author has been inactive for a while, could one of the collaborators please amend the commit message and land this on their behalf?

This is a useful fix for #59593 to keep the JUnit output spec-compliant, and it already has 5 approvals. Thanks!

This commit aligns the Node.js test runner’s JUnit XML output with the
official JUnit specification by removing the non-standard failure
attribute from elements and replacing it with a proper nested tag.
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@aduh95aduh95 added author ready PRs with CI started, the required approvals, and no outstanding review comments. and removed stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. labels Aug 17, 2026
@CuriousStork

Copy link
Copy Markdown

@aduh95 Hi! It looks like the CI jobs have been stuck in pending for more than a week. Could you please re-trigger the run when you have a moment? Thanks!

@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 31, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-ciPRs that need a full CI run.test_runnerIssues and PRs related to the test runner subsystem.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JUnit XML failure element and attribute are incorrect when using node:assert

11 participants

@devholic22@nodejs-github-bot@CuriousStork@mcollina@jasnell@benjamingr@lpinca@MoLow@atlowChemi@panva@aduh95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

test_runner: remove failure attribute in junit_report testcase element - #59685

Open
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element
Open

test_runner: remove failure attribute in junit_report testcase element#59685
devholic22 wants to merge 1 commit into
nodejs:mainfrom
devholic22:fix-junit-element

Conversation

@devholic22

@devholic22devholic22 commented Aug 30, 2025

Copy link
Copy Markdown

Fixes: #59593

This PR aligns the Node.js test runner’s JUnit XML output with the official JUnit specification by removing the non-standard failure attribute from elements and replacing it with a proper nested tag.

Changes

• Remove non-compliant failure attribute from elements
• Update snapshot tests accordingly

Background

The JUnit XML specification mandates that failure details must be represented via a nested (child) <failure> element inside a <testcase>, rather than as an attribute.

스크린샷 2025-08-30 오후 4 39 27

However, the Node.js test runner previously:
• Incorrectly embedded the failure message as a failure="..." attribute on , which is not spec-compliant
• This caused compatibility issues with tools like GitLab, Jenkins, or any CI/CD pipeline that parses JUnit reports strictly

Before:

<testcase name="testName" time="0.002234" classname="test" failure="The value must be 01 !== 0">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

After:

<testcase name="testName" time="0.002234" classname="test">
<failure type="testCodeFailure" message="The value must be 01 !== 0">

Testing

스크린샷 2025-08-30 오후 4 06 57
  • All existing tests pass

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-botnodejs-github-bot added needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem. labels Aug 30, 2025
children: [inspectWithNoCustomRetry(error, inspectOptions)],
});
currentTest.failures = 1;
currentTest.attrs.failure = error?.message ?? '';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the change the good, I wonder if we have to treat this as potentially breaking? @nodejs/test_runner @nodejs/tsc any thoughts? I'm fine landing as a semver-patch but want to be sure.

@MoLowMoLow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. also not sure rgarding semver-major vs patch

@lpincalpinca added the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 1, 2025
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@codecov

codecovBot commented Sep 1, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.13%. Comparing base (cc60845) to head (7cca5c1).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #59685 +/- ##
=======================================
Coverage 90.13% 90.13% =======================================
Files 752 752 Lines 251820 251819 -1 Branches 47352 47353 +1 =======================================
+ Hits 226974 226983 +9 - Misses 16158 16174 +16 + Partials 8688 8662 -26 
Files with missing linesCoverage Δ
lib/internal/test_runner/reporter/junit.js95.32% <ø> (+0.55%)⬆️

... and 47 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@CuriousStork

Copy link
Copy Markdown

Hello @atlowChemi

#59593 is auto-closed because #60274 has been merged, thank you.

Probably this PR also needs a ping, or should we reopen the issue #59593?

@mcollina

Copy link
Copy Markdown
Member

The commit message here needs an amend

@CuriousStork

Copy link
Copy Markdown

Hello @devholic22

Are you planning to amend the commit message? Thank you.

@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been marked as stale due to 90 days of inactivity.
It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.

@github-actionsgithub-actionsBot added the stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. label Jul 28, 2026
@CuriousStork

Copy link
Copy Markdown

@jasnell@mcollina@MoLow Hi! Since the original author has been inactive for a while, could one of the collaborators please amend the commit message and land this on their behalf?

This is a useful fix for #59593 to keep the JUnit output spec-compliant, and it already has 5 approvals. Thanks!

This commit aligns the Node.js test runner’s JUnit XML output with the
official JUnit specification by removing the non-standard failure
attribute from elements and replacing it with a proper nested tag.
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@aduh95aduh95 added author ready PRs with CI started, the required approvals, and no outstanding review comments. and removed stale Issues and PRs marked stale due to inactivity and scheduled for automatic closure. labels Aug 17, 2026
@CuriousStork

Copy link
Copy Markdown

@aduh95 Hi! It looks like the CI jobs have been stuck in pending for more than a week. Could you please re-trigger the run when you have a moment? Thanks!

@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 31, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-ciPRs that need a full CI run.test_runnerIssues and PRs related to the test runner subsystem.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JUnit XML failure element and attribute are incorrect when using node:assert

11 participants

@devholic22@nodejs-github-bot@CuriousStork@mcollina@jasnell@benjamingr@lpinca@MoLow@atlowChemi@panva@aduh95