From 8e22086f7d9e3d1eea0acd1f380be61c50155b8d Mon Sep 17 00:00:00 2001 From: Andrei Borza Date: Wed, 5 Aug 2026 15:32:43 +0200 Subject: [PATCH] test(effect): Re-enable effect server transaction e2e tests The no-tracer-provider default in `@sentry/node` (`skipOpenTelemetrySetup: true`) restores the AsyncLocalStorage async-context strategy that Effect's fiber model relies on, so the Effect tracer spans become the `http.server` transaction again. Un-fixme the transaction e2e tests in effect-3-node and effect-4-node. Co-Authored-By: Claude Opus 4.8 --- .../effect-3-node/tests/transactions.test.ts | 15 ++++----------- .../effect-4-node/tests/transactions.test.ts | 15 ++++----------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/effect-3-node/tests/transactions.test.ts b/dev-packages/e2e-tests/test-applications/effect-3-node/tests/transactions.test.ts index 486c4beb4502..e308bce09894 100644 --- a/dev-packages/e2e-tests/test-applications/effect-3-node/tests/transactions.test.ts +++ b/dev-packages/e2e-tests/test-applications/effect-3-node/tests/transactions.test.ts @@ -1,14 +1,7 @@ import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; -// TODO(v11): `@sentry/effect` server used to run on `@sentry/node-core/light`, which set an -// AsyncLocalStorage-based async context strategy that matched Effect's fiber model, so the Effect -// tracer's spans became the `http.server GET` transaction. On full `@sentry/node` the SDK installs -// the OpenTelemetry context strategy instead, and the Effect tracer's span context no longer -// propagates as expected, so no transaction is emitted. Marked fixme until the Effect SDK's server -// tracing is adapted to the full-node async context model. - -test.fixme('Sends an HTTP transaction', async ({ baseURL }) => { +test('Sends an HTTP transaction', async ({ baseURL }) => { const transactionEventPromise = waitForTransaction('effect-3-node', transactionEvent => { return transactionEvent?.transaction === 'http.server GET'; }); @@ -20,7 +13,7 @@ test.fixme('Sends an HTTP transaction', async ({ baseURL }) => { expect(transactionEvent.transaction).toBe('http.server GET'); }); -test.fixme('Sends transaction with manual Effect span', async ({ baseURL }) => { +test('Sends transaction with manual Effect span', async ({ baseURL }) => { const transactionEventPromise = waitForTransaction('effect-3-node', transactionEvent => { return ( transactionEvent?.transaction === 'http.server GET' && @@ -42,7 +35,7 @@ test.fixme('Sends transaction with manual Effect span', async ({ baseURL }) => { ]); }); -test.fixme('Sends Effect spans with correct parent-child structure', async ({ baseURL }) => { +test('Sends Effect spans with correct parent-child structure', async ({ baseURL }) => { const transactionEventPromise = waitForTransaction('effect-3-node', transactionEvent => { return ( transactionEvent?.transaction === 'http.server GET' && @@ -93,7 +86,7 @@ test.fixme('Sends Effect spans with correct parent-child structure', async ({ ba expect(nestedSpan).toBe(parentSpan); }); -test.fixme('Sends transaction for error route', async ({ baseURL }) => { +test('Sends transaction for error route', async ({ baseURL }) => { const transactionEventPromise = waitForTransaction('effect-3-node', transactionEvent => { return transactionEvent?.transaction === 'http.server GET'; }); diff --git a/dev-packages/e2e-tests/test-applications/effect-4-node/tests/transactions.test.ts b/dev-packages/e2e-tests/test-applications/effect-4-node/tests/transactions.test.ts index d6c06718ed74..763f55a34684 100644 --- a/dev-packages/e2e-tests/test-applications/effect-4-node/tests/transactions.test.ts +++ b/dev-packages/e2e-tests/test-applications/effect-4-node/tests/transactions.test.ts @@ -1,14 +1,7 @@ import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; -// TODO(v11): `@sentry/effect` server used to run on `@sentry/node-core/light`, which set an -// AsyncLocalStorage-based async context strategy that matched Effect's fiber model, so the Effect -// tracer's spans became the `http.server GET` transaction. On full `@sentry/node` the SDK installs -// the OpenTelemetry context strategy instead, and the Effect tracer's span context no longer -// propagates as expected, so no transaction is emitted. Marked fixme until the Effect SDK's server -// tracing is adapted to the full-node async context model. - -test.fixme('Sends an HTTP transaction', async ({ baseURL }) => { +test('Sends an HTTP transaction', async ({ baseURL }) => { const transactionEventPromise = waitForTransaction('effect-4-node', transactionEvent => { return transactionEvent?.transaction === 'http.server GET'; }); @@ -20,7 +13,7 @@ test.fixme('Sends an HTTP transaction', async ({ baseURL }) => { expect(transactionEvent.transaction).toBe('http.server GET'); }); -test.fixme('Sends transaction with manual Effect span', async ({ baseURL }) => { +test('Sends transaction with manual Effect span', async ({ baseURL }) => { const transactionEventPromise = waitForTransaction('effect-4-node', transactionEvent => { return ( transactionEvent?.transaction === 'http.server GET' && @@ -42,7 +35,7 @@ test.fixme('Sends transaction with manual Effect span', async ({ baseURL }) => { ]); }); -test.fixme('Sends Effect spans with correct parent-child structure', async ({ baseURL }) => { +test('Sends Effect spans with correct parent-child structure', async ({ baseURL }) => { const transactionEventPromise = waitForTransaction('effect-4-node', transactionEvent => { return ( transactionEvent?.transaction === 'http.server GET' && @@ -93,7 +86,7 @@ test.fixme('Sends Effect spans with correct parent-child structure', async ({ ba expect(nestedSpan).toBe(parentSpan); }); -test.fixme('Sends transaction for error route', async ({ baseURL }) => { +test('Sends transaction for error route', async ({ baseURL }) => { const transactionEventPromise = waitForTransaction('effect-4-node', transactionEvent => { return transactionEvent?.transaction === 'http.server GET'; });