Skip to content

test(node): Migrate tracing integration tests to createEsmAndCjsTests - #20961

Merged
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests
May 18, 2026
Merged

test(node): Migrate tracing integration tests to createEsmAndCjsTests#20961
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests

Conversation

@mydea

@mydeamydea commented May 18, 2026

Copy link
Copy Markdown
Member

Summary

Migrates the remaining integration-specific tracing tests under dev-packages/node-integration-tests/suites/tracing/ to use the createEsmAndCjsTests helper, which auto-runs each scenario in both ESM and CJS mode from a single .mjs source.

For each folder:

  • scenario*.jsscenario*.mjs (ESM imports)
  • Sentry.init extracted into a separate instrument.mjs
  • test.ts switched to createEsmAndCjsTests(__dirname, scenarioPath, instrumentPath, callback, options?)
  • failsOnEsm: true added only where CJS passed and ESM legitimately fails (i.e. instrumentation only patches the CJS module shape)

Migrated folders

FolderNotes
lru-memoizerfailsOnEsm: true — OTel instrumentation-lru-memoizer only patches the CJS function-shaped export.
mongodbmongodb v3 is CJS-only and has no named ESM exports — uses import mongodb from 'mongodb' + destructure.
mongooseStraight migration.
mysql2Straight migration (docker).
mysqlfailsOnEsm: true on all 3 scenarios — mysql v2 is CJS-only. Three scenarios kept (withConnect, withoutCallback, withoutConnect).
postgres3 scenarios. ignoreConnectSpans reuses the default scenario but with a separate instrument-ignoreConnect.mjs. pg-native scenario migrated as-is (still relies on local setupCommand: 'yarn' to build the native bindings).
postgresjsConsolidated previously-parallel .cjs/.mjs scenarios into a single .mjs each. The wait-for-postgres.js helper is still required from the scenarios via createRequire(import.meta.url) (revert of the .mjs-helper conversion approach — see notes below). The error stacktrace assertion uses expect.stringMatching(/postgres(\.cjs)?\.src:connection/) so the same expectation matches both modes.
redisStraight migration (docker).
redis-cache2 scenarios (ioredis, redis-4). Each scenario has its own instrument-*.mjs because they pass different cachePrefixes to redisIntegration.
redis-dcUses await import('redis-5') inside run() to preserve the comment-documented ordering where the DC subscriber must be registered (via Promise.resolve().then) before node-redis eagerly creates its native TracingChannels on require/import.
tediousMigrated but kept describe.skip (the test was previously skipped as flaky in #15798). Manually verified both modes pass when un-skipped.
apollo-graphql3 scenarios (query, mutation, error). Shared apollo-server.mjs helper copied into the tmp dir via copyPaths: ['apollo-server.mjs'] and loaded with await import('./apollo-server.mjs') from each scenario.
apollo-graphql/useOperationNameForRootSpan6 scenarios. Reuses the parent apollo-server.mjs via ../../apollo-server.mjs (the scenarios run from useOperationNameForRootSpan/tmp_xxx/, so this resolves back to the apollo-graphql folder). Scenarios use Sentry.getClient().tracer instead of capturing the client returned by Sentry.init (since init now lives in instrument.mjs).

Out of scope

The following folders under tracing/ are still using createRunner directly — they are not integrations for a specific package but general tracing-behavior tests, so they're intentionally left alone:

  • meta-tags*, meta-tags-twp*
  • sample-rate-propagation/*, sample-rand-propagation
  • tracePropagationTargets/*
  • traceid-recycling*
  • dsc-txn-name-update
  • http-client-spans/*
  • maxSpans, envelope-header/*, linking

🤖 Generated with Claude Code

@mydeamydea changed the title test(node-integration): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026
@mydeamydea changed the title test(node): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 819129e. Configure here.

Comment threaddev-packages/node-integration-tests/suites/tracing/postgres/test.ts Outdated
@mydeamydea self-assigned this May 18, 2026
@mydea
mydea marked this pull request as ready for review May 18, 2026 09:16
@mydea
mydea requested a review from a team as a code ownerMay 18, 2026 09:16

@JPeer264JPeer264 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.

nice

@mydea
mydeaforce-pushed the fn/rewrite-node-integration-tests branch from 38ed9fc to d348750CompareMay 18, 2026 10:06
@mydea
mydea merged commit aa5f78a into developMay 18, 2026
47 checks passed
@mydea
mydea deleted the fn/rewrite-node-integration-tests branch May 18, 2026 10:23
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mydea@JPeer264
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
test(node): Migrate tracing integration tests to `createEsmAndCjsTests` by mydea · Pull Request #20961 · getsentry/sentry-javascript · GitHub
Skip to content

test(node): Migrate tracing integration tests to createEsmAndCjsTests - #20961

Merged
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests
May 18, 2026
Merged

test(node): Migrate tracing integration tests to createEsmAndCjsTests#20961
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests

Conversation

@mydea

@mydeamydea commented May 18, 2026

Copy link
Copy Markdown
Member

Summary

Migrates the remaining integration-specific tracing tests under dev-packages/node-integration-tests/suites/tracing/ to use the createEsmAndCjsTests helper, which auto-runs each scenario in both ESM and CJS mode from a single .mjs source.

For each folder:

  • scenario*.jsscenario*.mjs (ESM imports)
  • Sentry.init extracted into a separate instrument.mjs
  • test.ts switched to createEsmAndCjsTests(__dirname, scenarioPath, instrumentPath, callback, options?)
  • failsOnEsm: true added only where CJS passed and ESM legitimately fails (i.e. instrumentation only patches the CJS module shape)

Migrated folders

FolderNotes
lru-memoizerfailsOnEsm: true — OTel instrumentation-lru-memoizer only patches the CJS function-shaped export.
mongodbmongodb v3 is CJS-only and has no named ESM exports — uses import mongodb from 'mongodb' + destructure.
mongooseStraight migration.
mysql2Straight migration (docker).
mysqlfailsOnEsm: true on all 3 scenarios — mysql v2 is CJS-only. Three scenarios kept (withConnect, withoutCallback, withoutConnect).
postgres3 scenarios. ignoreConnectSpans reuses the default scenario but with a separate instrument-ignoreConnect.mjs. pg-native scenario migrated as-is (still relies on local setupCommand: 'yarn' to build the native bindings).
postgresjsConsolidated previously-parallel .cjs/.mjs scenarios into a single .mjs each. The wait-for-postgres.js helper is still required from the scenarios via createRequire(import.meta.url) (revert of the .mjs-helper conversion approach — see notes below). The error stacktrace assertion uses expect.stringMatching(/postgres(\.cjs)?\.src:connection/) so the same expectation matches both modes.
redisStraight migration (docker).
redis-cache2 scenarios (ioredis, redis-4). Each scenario has its own instrument-*.mjs because they pass different cachePrefixes to redisIntegration.
redis-dcUses await import('redis-5') inside run() to preserve the comment-documented ordering where the DC subscriber must be registered (via Promise.resolve().then) before node-redis eagerly creates its native TracingChannels on require/import.
tediousMigrated but kept describe.skip (the test was previously skipped as flaky in #15798). Manually verified both modes pass when un-skipped.
apollo-graphql3 scenarios (query, mutation, error). Shared apollo-server.mjs helper copied into the tmp dir via copyPaths: ['apollo-server.mjs'] and loaded with await import('./apollo-server.mjs') from each scenario.
apollo-graphql/useOperationNameForRootSpan6 scenarios. Reuses the parent apollo-server.mjs via ../../apollo-server.mjs (the scenarios run from useOperationNameForRootSpan/tmp_xxx/, so this resolves back to the apollo-graphql folder). Scenarios use Sentry.getClient().tracer instead of capturing the client returned by Sentry.init (since init now lives in instrument.mjs).

Out of scope

The following folders under tracing/ are still using createRunner directly — they are not integrations for a specific package but general tracing-behavior tests, so they're intentionally left alone:

  • meta-tags*, meta-tags-twp*
  • sample-rate-propagation/*, sample-rand-propagation
  • tracePropagationTargets/*
  • traceid-recycling*
  • dsc-txn-name-update
  • http-client-spans/*
  • maxSpans, envelope-header/*, linking

🤖 Generated with Claude Code

@mydeamydea changed the title test(node-integration): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026
@mydeamydea changed the title test(node): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 819129e. Configure here.

Comment threaddev-packages/node-integration-tests/suites/tracing/postgres/test.ts Outdated
@mydeamydea self-assigned this May 18, 2026
@mydea
mydea marked this pull request as ready for review May 18, 2026 09:16
@mydea
mydea requested a review from a team as a code ownerMay 18, 2026 09:16

@JPeer264JPeer264 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.

nice

@mydea
mydeaforce-pushed the fn/rewrite-node-integration-tests branch from 38ed9fc to d348750CompareMay 18, 2026 10:06
@mydea
mydea merged commit aa5f78a into developMay 18, 2026
47 checks passed
@mydea
mydea deleted the fn/rewrite-node-integration-tests branch May 18, 2026 10:23
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mydea@JPeer264
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' test(node): Migrate tracing integration tests to `createEsmAndCjsTests` by mydea · Pull Request #20961 · getsentry/sentry-javascript · GitHub
Skip to content

test(node): Migrate tracing integration tests to createEsmAndCjsTests - #20961

Merged
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests
May 18, 2026
Merged

test(node): Migrate tracing integration tests to createEsmAndCjsTests#20961
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests

Conversation

@mydea

@mydeamydea commented May 18, 2026

Copy link
Copy Markdown
Member

Summary

Migrates the remaining integration-specific tracing tests under dev-packages/node-integration-tests/suites/tracing/ to use the createEsmAndCjsTests helper, which auto-runs each scenario in both ESM and CJS mode from a single .mjs source.

For each folder:

  • scenario*.jsscenario*.mjs (ESM imports)
  • Sentry.init extracted into a separate instrument.mjs
  • test.ts switched to createEsmAndCjsTests(__dirname, scenarioPath, instrumentPath, callback, options?)
  • failsOnEsm: true added only where CJS passed and ESM legitimately fails (i.e. instrumentation only patches the CJS module shape)

Migrated folders

FolderNotes
lru-memoizerfailsOnEsm: true — OTel instrumentation-lru-memoizer only patches the CJS function-shaped export.
mongodbmongodb v3 is CJS-only and has no named ESM exports — uses import mongodb from 'mongodb' + destructure.
mongooseStraight migration.
mysql2Straight migration (docker).
mysqlfailsOnEsm: true on all 3 scenarios — mysql v2 is CJS-only. Three scenarios kept (withConnect, withoutCallback, withoutConnect).
postgres3 scenarios. ignoreConnectSpans reuses the default scenario but with a separate instrument-ignoreConnect.mjs. pg-native scenario migrated as-is (still relies on local setupCommand: 'yarn' to build the native bindings).
postgresjsConsolidated previously-parallel .cjs/.mjs scenarios into a single .mjs each. The wait-for-postgres.js helper is still required from the scenarios via createRequire(import.meta.url) (revert of the .mjs-helper conversion approach — see notes below). The error stacktrace assertion uses expect.stringMatching(/postgres(\.cjs)?\.src:connection/) so the same expectation matches both modes.
redisStraight migration (docker).
redis-cache2 scenarios (ioredis, redis-4). Each scenario has its own instrument-*.mjs because they pass different cachePrefixes to redisIntegration.
redis-dcUses await import('redis-5') inside run() to preserve the comment-documented ordering where the DC subscriber must be registered (via Promise.resolve().then) before node-redis eagerly creates its native TracingChannels on require/import.
tediousMigrated but kept describe.skip (the test was previously skipped as flaky in #15798). Manually verified both modes pass when un-skipped.
apollo-graphql3 scenarios (query, mutation, error). Shared apollo-server.mjs helper copied into the tmp dir via copyPaths: ['apollo-server.mjs'] and loaded with await import('./apollo-server.mjs') from each scenario.
apollo-graphql/useOperationNameForRootSpan6 scenarios. Reuses the parent apollo-server.mjs via ../../apollo-server.mjs (the scenarios run from useOperationNameForRootSpan/tmp_xxx/, so this resolves back to the apollo-graphql folder). Scenarios use Sentry.getClient().tracer instead of capturing the client returned by Sentry.init (since init now lives in instrument.mjs).

Out of scope

The following folders under tracing/ are still using createRunner directly — they are not integrations for a specific package but general tracing-behavior tests, so they're intentionally left alone:

  • meta-tags*, meta-tags-twp*
  • sample-rate-propagation/*, sample-rand-propagation
  • tracePropagationTargets/*
  • traceid-recycling*
  • dsc-txn-name-update
  • http-client-spans/*
  • maxSpans, envelope-header/*, linking

🤖 Generated with Claude Code

@mydeamydea changed the title test(node-integration): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026
@mydeamydea changed the title test(node): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 819129e. Configure here.

Comment threaddev-packages/node-integration-tests/suites/tracing/postgres/test.ts Outdated
@mydeamydea self-assigned this May 18, 2026
@mydea
mydea marked this pull request as ready for review May 18, 2026 09:16
@mydea
mydea requested a review from a team as a code ownerMay 18, 2026 09:16

@JPeer264JPeer264 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.

nice

@mydea
mydeaforce-pushed the fn/rewrite-node-integration-tests branch from 38ed9fc to d348750CompareMay 18, 2026 10:06
@mydea
mydea merged commit aa5f78a into developMay 18, 2026
47 checks passed
@mydea
mydea deleted the fn/rewrite-node-integration-tests branch May 18, 2026 10:23
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

test(node): Migrate tracing integration tests to createEsmAndCjsTests - #20961

Merged
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests
May 18, 2026
Merged

test(node): Migrate tracing integration tests to createEsmAndCjsTests#20961
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests

Conversation

@mydea

@mydeamydea commented May 18, 2026

Copy link
Copy Markdown
Member

Summary

Migrates the remaining integration-specific tracing tests under dev-packages/node-integration-tests/suites/tracing/ to use the createEsmAndCjsTests helper, which auto-runs each scenario in both ESM and CJS mode from a single .mjs source.

For each folder:

  • scenario*.jsscenario*.mjs (ESM imports)
  • Sentry.init extracted into a separate instrument.mjs
  • test.ts switched to createEsmAndCjsTests(__dirname, scenarioPath, instrumentPath, callback, options?)
  • failsOnEsm: true added only where CJS passed and ESM legitimately fails (i.e. instrumentation only patches the CJS module shape)

Migrated folders

FolderNotes
lru-memoizerfailsOnEsm: true — OTel instrumentation-lru-memoizer only patches the CJS function-shaped export.
mongodbmongodb v3 is CJS-only and has no named ESM exports — uses import mongodb from 'mongodb' + destructure.
mongooseStraight migration.
mysql2Straight migration (docker).
mysqlfailsOnEsm: true on all 3 scenarios — mysql v2 is CJS-only. Three scenarios kept (withConnect, withoutCallback, withoutConnect).
postgres3 scenarios. ignoreConnectSpans reuses the default scenario but with a separate instrument-ignoreConnect.mjs. pg-native scenario migrated as-is (still relies on local setupCommand: 'yarn' to build the native bindings).
postgresjsConsolidated previously-parallel .cjs/.mjs scenarios into a single .mjs each. The wait-for-postgres.js helper is still required from the scenarios via createRequire(import.meta.url) (revert of the .mjs-helper conversion approach — see notes below). The error stacktrace assertion uses expect.stringMatching(/postgres(\.cjs)?\.src:connection/) so the same expectation matches both modes.
redisStraight migration (docker).
redis-cache2 scenarios (ioredis, redis-4). Each scenario has its own instrument-*.mjs because they pass different cachePrefixes to redisIntegration.
redis-dcUses await import('redis-5') inside run() to preserve the comment-documented ordering where the DC subscriber must be registered (via Promise.resolve().then) before node-redis eagerly creates its native TracingChannels on require/import.
tediousMigrated but kept describe.skip (the test was previously skipped as flaky in #15798). Manually verified both modes pass when un-skipped.
apollo-graphql3 scenarios (query, mutation, error). Shared apollo-server.mjs helper copied into the tmp dir via copyPaths: ['apollo-server.mjs'] and loaded with await import('./apollo-server.mjs') from each scenario.
apollo-graphql/useOperationNameForRootSpan6 scenarios. Reuses the parent apollo-server.mjs via ../../apollo-server.mjs (the scenarios run from useOperationNameForRootSpan/tmp_xxx/, so this resolves back to the apollo-graphql folder). Scenarios use Sentry.getClient().tracer instead of capturing the client returned by Sentry.init (since init now lives in instrument.mjs).

Out of scope

The following folders under tracing/ are still using createRunner directly — they are not integrations for a specific package but general tracing-behavior tests, so they're intentionally left alone:

  • meta-tags*, meta-tags-twp*
  • sample-rate-propagation/*, sample-rand-propagation
  • tracePropagationTargets/*
  • traceid-recycling*
  • dsc-txn-name-update
  • http-client-spans/*
  • maxSpans, envelope-header/*, linking

🤖 Generated with Claude Code

@mydeamydea changed the title test(node-integration): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026
@mydeamydea changed the title test(node): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 819129e. Configure here.

Comment threaddev-packages/node-integration-tests/suites/tracing/postgres/test.ts Outdated
@mydeamydea self-assigned this May 18, 2026
@mydea
mydea marked this pull request as ready for review May 18, 2026 09:16
@mydea
mydea requested a review from a team as a code ownerMay 18, 2026 09:16

@JPeer264JPeer264 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.

nice

@mydea
mydeaforce-pushed the fn/rewrite-node-integration-tests branch from 38ed9fc to d348750CompareMay 18, 2026 10:06
@mydea
mydea merged commit aa5f78a into developMay 18, 2026
47 checks passed
@mydea
mydea deleted the fn/rewrite-node-integration-tests branch May 18, 2026 10:23
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mydea@JPeer264
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' test(node): Migrate tracing integration tests to `createEsmAndCjsTests` by mydea · Pull Request #20961 · getsentry/sentry-javascript · GitHub
Skip to content

test(node): Migrate tracing integration tests to createEsmAndCjsTests - #20961

Merged
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests
May 18, 2026
Merged

test(node): Migrate tracing integration tests to createEsmAndCjsTests#20961
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests

Conversation

@mydea

@mydeamydea commented May 18, 2026

Copy link
Copy Markdown
Member

Summary

Migrates the remaining integration-specific tracing tests under dev-packages/node-integration-tests/suites/tracing/ to use the createEsmAndCjsTests helper, which auto-runs each scenario in both ESM and CJS mode from a single .mjs source.

For each folder:

  • scenario*.jsscenario*.mjs (ESM imports)
  • Sentry.init extracted into a separate instrument.mjs
  • test.ts switched to createEsmAndCjsTests(__dirname, scenarioPath, instrumentPath, callback, options?)
  • failsOnEsm: true added only where CJS passed and ESM legitimately fails (i.e. instrumentation only patches the CJS module shape)

Migrated folders

FolderNotes
lru-memoizerfailsOnEsm: true — OTel instrumentation-lru-memoizer only patches the CJS function-shaped export.
mongodbmongodb v3 is CJS-only and has no named ESM exports — uses import mongodb from 'mongodb' + destructure.
mongooseStraight migration.
mysql2Straight migration (docker).
mysqlfailsOnEsm: true on all 3 scenarios — mysql v2 is CJS-only. Three scenarios kept (withConnect, withoutCallback, withoutConnect).
postgres3 scenarios. ignoreConnectSpans reuses the default scenario but with a separate instrument-ignoreConnect.mjs. pg-native scenario migrated as-is (still relies on local setupCommand: 'yarn' to build the native bindings).
postgresjsConsolidated previously-parallel .cjs/.mjs scenarios into a single .mjs each. The wait-for-postgres.js helper is still required from the scenarios via createRequire(import.meta.url) (revert of the .mjs-helper conversion approach — see notes below). The error stacktrace assertion uses expect.stringMatching(/postgres(\.cjs)?\.src:connection/) so the same expectation matches both modes.
redisStraight migration (docker).
redis-cache2 scenarios (ioredis, redis-4). Each scenario has its own instrument-*.mjs because they pass different cachePrefixes to redisIntegration.
redis-dcUses await import('redis-5') inside run() to preserve the comment-documented ordering where the DC subscriber must be registered (via Promise.resolve().then) before node-redis eagerly creates its native TracingChannels on require/import.
tediousMigrated but kept describe.skip (the test was previously skipped as flaky in #15798). Manually verified both modes pass when un-skipped.
apollo-graphql3 scenarios (query, mutation, error). Shared apollo-server.mjs helper copied into the tmp dir via copyPaths: ['apollo-server.mjs'] and loaded with await import('./apollo-server.mjs') from each scenario.
apollo-graphql/useOperationNameForRootSpan6 scenarios. Reuses the parent apollo-server.mjs via ../../apollo-server.mjs (the scenarios run from useOperationNameForRootSpan/tmp_xxx/, so this resolves back to the apollo-graphql folder). Scenarios use Sentry.getClient().tracer instead of capturing the client returned by Sentry.init (since init now lives in instrument.mjs).

Out of scope

The following folders under tracing/ are still using createRunner directly — they are not integrations for a specific package but general tracing-behavior tests, so they're intentionally left alone:

  • meta-tags*, meta-tags-twp*
  • sample-rate-propagation/*, sample-rand-propagation
  • tracePropagationTargets/*
  • traceid-recycling*
  • dsc-txn-name-update
  • http-client-spans/*
  • maxSpans, envelope-header/*, linking

🤖 Generated with Claude Code

@mydeamydea changed the title test(node-integration): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026
@mydeamydea changed the title test(node): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 819129e. Configure here.

Comment threaddev-packages/node-integration-tests/suites/tracing/postgres/test.ts Outdated
@mydeamydea self-assigned this May 18, 2026
@mydea
mydea marked this pull request as ready for review May 18, 2026 09:16
@mydea
mydea requested a review from a team as a code ownerMay 18, 2026 09:16

@JPeer264JPeer264 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.

nice

@mydea
mydeaforce-pushed the fn/rewrite-node-integration-tests branch from 38ed9fc to d348750CompareMay 18, 2026 10:06
@mydea
mydea merged commit aa5f78a into developMay 18, 2026
47 checks passed
@mydea
mydea deleted the fn/rewrite-node-integration-tests branch May 18, 2026 10:23
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mydea@JPeer264
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' test(node): Migrate tracing integration tests to `createEsmAndCjsTests` by mydea · Pull Request #20961 · getsentry/sentry-javascript · GitHub
Skip to content

test(node): Migrate tracing integration tests to createEsmAndCjsTests - #20961

Merged
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests
May 18, 2026
Merged

test(node): Migrate tracing integration tests to createEsmAndCjsTests#20961
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests

Conversation

@mydea

@mydeamydea commented May 18, 2026

Copy link
Copy Markdown
Member

Summary

Migrates the remaining integration-specific tracing tests under dev-packages/node-integration-tests/suites/tracing/ to use the createEsmAndCjsTests helper, which auto-runs each scenario in both ESM and CJS mode from a single .mjs source.

For each folder:

  • scenario*.jsscenario*.mjs (ESM imports)
  • Sentry.init extracted into a separate instrument.mjs
  • test.ts switched to createEsmAndCjsTests(__dirname, scenarioPath, instrumentPath, callback, options?)
  • failsOnEsm: true added only where CJS passed and ESM legitimately fails (i.e. instrumentation only patches the CJS module shape)

Migrated folders

FolderNotes
lru-memoizerfailsOnEsm: true — OTel instrumentation-lru-memoizer only patches the CJS function-shaped export.
mongodbmongodb v3 is CJS-only and has no named ESM exports — uses import mongodb from 'mongodb' + destructure.
mongooseStraight migration.
mysql2Straight migration (docker).
mysqlfailsOnEsm: true on all 3 scenarios — mysql v2 is CJS-only. Three scenarios kept (withConnect, withoutCallback, withoutConnect).
postgres3 scenarios. ignoreConnectSpans reuses the default scenario but with a separate instrument-ignoreConnect.mjs. pg-native scenario migrated as-is (still relies on local setupCommand: 'yarn' to build the native bindings).
postgresjsConsolidated previously-parallel .cjs/.mjs scenarios into a single .mjs each. The wait-for-postgres.js helper is still required from the scenarios via createRequire(import.meta.url) (revert of the .mjs-helper conversion approach — see notes below). The error stacktrace assertion uses expect.stringMatching(/postgres(\.cjs)?\.src:connection/) so the same expectation matches both modes.
redisStraight migration (docker).
redis-cache2 scenarios (ioredis, redis-4). Each scenario has its own instrument-*.mjs because they pass different cachePrefixes to redisIntegration.
redis-dcUses await import('redis-5') inside run() to preserve the comment-documented ordering where the DC subscriber must be registered (via Promise.resolve().then) before node-redis eagerly creates its native TracingChannels on require/import.
tediousMigrated but kept describe.skip (the test was previously skipped as flaky in #15798). Manually verified both modes pass when un-skipped.
apollo-graphql3 scenarios (query, mutation, error). Shared apollo-server.mjs helper copied into the tmp dir via copyPaths: ['apollo-server.mjs'] and loaded with await import('./apollo-server.mjs') from each scenario.
apollo-graphql/useOperationNameForRootSpan6 scenarios. Reuses the parent apollo-server.mjs via ../../apollo-server.mjs (the scenarios run from useOperationNameForRootSpan/tmp_xxx/, so this resolves back to the apollo-graphql folder). Scenarios use Sentry.getClient().tracer instead of capturing the client returned by Sentry.init (since init now lives in instrument.mjs).

Out of scope

The following folders under tracing/ are still using createRunner directly — they are not integrations for a specific package but general tracing-behavior tests, so they're intentionally left alone:

  • meta-tags*, meta-tags-twp*
  • sample-rate-propagation/*, sample-rand-propagation
  • tracePropagationTargets/*
  • traceid-recycling*
  • dsc-txn-name-update
  • http-client-spans/*
  • maxSpans, envelope-header/*, linking

🤖 Generated with Claude Code

@mydeamydea changed the title test(node-integration): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026
@mydeamydea changed the title test(node): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 819129e. Configure here.

Comment threaddev-packages/node-integration-tests/suites/tracing/postgres/test.ts Outdated
@mydeamydea self-assigned this May 18, 2026
@mydea
mydea marked this pull request as ready for review May 18, 2026 09:16
@mydea
mydea requested a review from a team as a code ownerMay 18, 2026 09:16

@JPeer264JPeer264 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.

nice

@mydea
mydeaforce-pushed the fn/rewrite-node-integration-tests branch from 38ed9fc to d348750CompareMay 18, 2026 10:06
@mydea
mydea merged commit aa5f78a into developMay 18, 2026
47 checks passed
@mydea
mydea deleted the fn/rewrite-node-integration-tests branch May 18, 2026 10:23
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mydea@JPeer264
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' test(node): Migrate tracing integration tests to `createEsmAndCjsTests` by mydea · Pull Request #20961 · getsentry/sentry-javascript · GitHub
Skip to content

test(node): Migrate tracing integration tests to createEsmAndCjsTests - #20961

Merged
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests
May 18, 2026
Merged

test(node): Migrate tracing integration tests to createEsmAndCjsTests#20961
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests

Conversation

@mydea

@mydeamydea commented May 18, 2026

Copy link
Copy Markdown
Member

Summary

Migrates the remaining integration-specific tracing tests under dev-packages/node-integration-tests/suites/tracing/ to use the createEsmAndCjsTests helper, which auto-runs each scenario in both ESM and CJS mode from a single .mjs source.

For each folder:

  • scenario*.jsscenario*.mjs (ESM imports)
  • Sentry.init extracted into a separate instrument.mjs
  • test.ts switched to createEsmAndCjsTests(__dirname, scenarioPath, instrumentPath, callback, options?)
  • failsOnEsm: true added only where CJS passed and ESM legitimately fails (i.e. instrumentation only patches the CJS module shape)

Migrated folders

FolderNotes
lru-memoizerfailsOnEsm: true — OTel instrumentation-lru-memoizer only patches the CJS function-shaped export.
mongodbmongodb v3 is CJS-only and has no named ESM exports — uses import mongodb from 'mongodb' + destructure.
mongooseStraight migration.
mysql2Straight migration (docker).
mysqlfailsOnEsm: true on all 3 scenarios — mysql v2 is CJS-only. Three scenarios kept (withConnect, withoutCallback, withoutConnect).
postgres3 scenarios. ignoreConnectSpans reuses the default scenario but with a separate instrument-ignoreConnect.mjs. pg-native scenario migrated as-is (still relies on local setupCommand: 'yarn' to build the native bindings).
postgresjsConsolidated previously-parallel .cjs/.mjs scenarios into a single .mjs each. The wait-for-postgres.js helper is still required from the scenarios via createRequire(import.meta.url) (revert of the .mjs-helper conversion approach — see notes below). The error stacktrace assertion uses expect.stringMatching(/postgres(\.cjs)?\.src:connection/) so the same expectation matches both modes.
redisStraight migration (docker).
redis-cache2 scenarios (ioredis, redis-4). Each scenario has its own instrument-*.mjs because they pass different cachePrefixes to redisIntegration.
redis-dcUses await import('redis-5') inside run() to preserve the comment-documented ordering where the DC subscriber must be registered (via Promise.resolve().then) before node-redis eagerly creates its native TracingChannels on require/import.
tediousMigrated but kept describe.skip (the test was previously skipped as flaky in #15798). Manually verified both modes pass when un-skipped.
apollo-graphql3 scenarios (query, mutation, error). Shared apollo-server.mjs helper copied into the tmp dir via copyPaths: ['apollo-server.mjs'] and loaded with await import('./apollo-server.mjs') from each scenario.
apollo-graphql/useOperationNameForRootSpan6 scenarios. Reuses the parent apollo-server.mjs via ../../apollo-server.mjs (the scenarios run from useOperationNameForRootSpan/tmp_xxx/, so this resolves back to the apollo-graphql folder). Scenarios use Sentry.getClient().tracer instead of capturing the client returned by Sentry.init (since init now lives in instrument.mjs).

Out of scope

The following folders under tracing/ are still using createRunner directly — they are not integrations for a specific package but general tracing-behavior tests, so they're intentionally left alone:

  • meta-tags*, meta-tags-twp*
  • sample-rate-propagation/*, sample-rand-propagation
  • tracePropagationTargets/*
  • traceid-recycling*
  • dsc-txn-name-update
  • http-client-spans/*
  • maxSpans, envelope-header/*, linking

🤖 Generated with Claude Code

@mydeamydea changed the title test(node-integration): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026
@mydeamydea changed the title test(node): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 819129e. Configure here.

Comment threaddev-packages/node-integration-tests/suites/tracing/postgres/test.ts Outdated
@mydeamydea self-assigned this May 18, 2026
@mydea
mydea marked this pull request as ready for review May 18, 2026 09:16
@mydea
mydea requested a review from a team as a code ownerMay 18, 2026 09:16

@JPeer264JPeer264 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.

nice

@mydea
mydeaforce-pushed the fn/rewrite-node-integration-tests branch from 38ed9fc to d348750CompareMay 18, 2026 10:06
@mydea
mydea merged commit aa5f78a into developMay 18, 2026
47 checks passed
@mydea
mydea deleted the fn/rewrite-node-integration-tests branch May 18, 2026 10:23
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

test(node): Migrate tracing integration tests to createEsmAndCjsTests - #20961

Merged
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests
May 18, 2026
Merged

test(node): Migrate tracing integration tests to createEsmAndCjsTests#20961
mydea merged 16 commits into
developfrom
fn/rewrite-node-integration-tests

Conversation

@mydea

@mydeamydea commented May 18, 2026

Copy link
Copy Markdown
Member

Summary

Migrates the remaining integration-specific tracing tests under dev-packages/node-integration-tests/suites/tracing/ to use the createEsmAndCjsTests helper, which auto-runs each scenario in both ESM and CJS mode from a single .mjs source.

For each folder:

  • scenario*.jsscenario*.mjs (ESM imports)
  • Sentry.init extracted into a separate instrument.mjs
  • test.ts switched to createEsmAndCjsTests(__dirname, scenarioPath, instrumentPath, callback, options?)
  • failsOnEsm: true added only where CJS passed and ESM legitimately fails (i.e. instrumentation only patches the CJS module shape)

Migrated folders

FolderNotes
lru-memoizerfailsOnEsm: true — OTel instrumentation-lru-memoizer only patches the CJS function-shaped export.
mongodbmongodb v3 is CJS-only and has no named ESM exports — uses import mongodb from 'mongodb' + destructure.
mongooseStraight migration.
mysql2Straight migration (docker).
mysqlfailsOnEsm: true on all 3 scenarios — mysql v2 is CJS-only. Three scenarios kept (withConnect, withoutCallback, withoutConnect).
postgres3 scenarios. ignoreConnectSpans reuses the default scenario but with a separate instrument-ignoreConnect.mjs. pg-native scenario migrated as-is (still relies on local setupCommand: 'yarn' to build the native bindings).
postgresjsConsolidated previously-parallel .cjs/.mjs scenarios into a single .mjs each. The wait-for-postgres.js helper is still required from the scenarios via createRequire(import.meta.url) (revert of the .mjs-helper conversion approach — see notes below). The error stacktrace assertion uses expect.stringMatching(/postgres(\.cjs)?\.src:connection/) so the same expectation matches both modes.
redisStraight migration (docker).
redis-cache2 scenarios (ioredis, redis-4). Each scenario has its own instrument-*.mjs because they pass different cachePrefixes to redisIntegration.
redis-dcUses await import('redis-5') inside run() to preserve the comment-documented ordering where the DC subscriber must be registered (via Promise.resolve().then) before node-redis eagerly creates its native TracingChannels on require/import.
tediousMigrated but kept describe.skip (the test was previously skipped as flaky in #15798). Manually verified both modes pass when un-skipped.
apollo-graphql3 scenarios (query, mutation, error). Shared apollo-server.mjs helper copied into the tmp dir via copyPaths: ['apollo-server.mjs'] and loaded with await import('./apollo-server.mjs') from each scenario.
apollo-graphql/useOperationNameForRootSpan6 scenarios. Reuses the parent apollo-server.mjs via ../../apollo-server.mjs (the scenarios run from useOperationNameForRootSpan/tmp_xxx/, so this resolves back to the apollo-graphql folder). Scenarios use Sentry.getClient().tracer instead of capturing the client returned by Sentry.init (since init now lives in instrument.mjs).

Out of scope

The following folders under tracing/ are still using createRunner directly — they are not integrations for a specific package but general tracing-behavior tests, so they're intentionally left alone:

  • meta-tags*, meta-tags-twp*
  • sample-rate-propagation/*, sample-rand-propagation
  • tracePropagationTargets/*
  • traceid-recycling*
  • dsc-txn-name-update
  • http-client-spans/*
  • maxSpans, envelope-header/*, linking

🤖 Generated with Claude Code

@mydeamydea changed the title test(node-integration): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026
@mydeamydea changed the title test(node): Migrate tracing integration tests to createEsmAndCjsTeststest(node): Migrate tracing integration tests to createEsmAndCjsTestsMay 18, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 819129e. Configure here.

Comment threaddev-packages/node-integration-tests/suites/tracing/postgres/test.ts Outdated
@mydeamydea self-assigned this May 18, 2026
@mydea
mydea marked this pull request as ready for review May 18, 2026 09:16
@mydea
mydea requested a review from a team as a code ownerMay 18, 2026 09:16

@JPeer264JPeer264 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.

nice

@mydea
mydeaforce-pushed the fn/rewrite-node-integration-tests branch from 38ed9fc to d348750CompareMay 18, 2026 10:06
@mydea
mydea merged commit aa5f78a into developMay 18, 2026
47 checks passed
@mydea
mydea deleted the fn/rewrite-node-integration-tests branch May 18, 2026 10:23
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mydea@JPeer264