From 9c40d1e8a0e4c1a71f6c13950f423c3e1c537d5e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 10 Apr 2026 10:07:35 +0000 Subject: [PATCH 1/3] Initial plan From e82db6649c6f51a3ad2428fcb051b7563e13c16f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 10 Apr 2026 10:13:38 +0000 Subject: [PATCH 2/3] fix(e2e): Add op check to waitForTransaction in React Router e2e tests Add `transactionEvent.contexts?.trace?.op` checks to all `waitForTransaction` callbacks in React Router e2e performance tests. Previously, the callbacks only checked the transaction name (e.g., `transactionEvent.transaction === '/performance'`), which could match either a pageload or navigation transaction in race conditions. This caused the flaky test failure where a navigation transaction was captured instead of the expected pageload transaction. Pageload tests now include `&& transactionEvent.contexts?.trace?.op === 'pageload'` and navigation tests include `&& transactionEvent.contexts?.trace?.op === 'navigation'`. This follows the pattern already used in `react-router-7-framework-instrumentation` tests. Co-Authored-By: Claude Agent-Logs-Url: https://github.com/getsentry/sentry-javascript/sessions/b44f977f-b777-4975-9077-230d435aed7f Co-authored-by: Lms24 <8420481+Lms24@users.noreply.github.com> --- .../tests/performance/navigation.client.test.ts | 9 +++++++-- .../tests/performance/pageload.client.test.ts | 10 +++++++--- .../tests/performance/navigation.client.test.ts | 9 +++++++-- .../tests/performance/pageload.client.test.ts | 10 +++++++--- .../tests/performance/navigation.client.test.ts | 5 ++++- .../tests/performance/pageload.client.test.ts | 6 ++++-- .../tests/performance/navigation.client.test.ts | 5 ++++- .../tests/performance/pageload.client.test.ts | 6 ++++-- .../tests/performance/navigation.client.test.ts | 14 +++++++++++--- .../tests/performance/pageload.client.test.ts | 10 +++++++--- 10 files changed, 62 insertions(+), 22 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/navigation.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/navigation.client.test.ts index 9e9891bd9306..3e44c612b462 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/navigation.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/navigation.client.test.ts @@ -5,7 +5,9 @@ import { APP_NAME } from '../constants'; test.describe('client - navigation performance', () => { test('should create navigation transaction', async ({ page }) => { const navigationPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/ssr'; + return ( + transactionEvent.transaction === '/performance/ssr' && transactionEvent.contexts?.trace?.op === 'navigation' + ); }); await page.goto(`/performance`); // pageload @@ -56,7 +58,10 @@ test.describe('client - navigation performance', () => { test('should update navigation transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'navigation' + ); }); await page.goto(`/performance`); // pageload diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/pageload.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/pageload.client.test.ts index b374c0ce4642..7c27e26152be 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/pageload.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/pageload.client.test.ts @@ -5,7 +5,7 @@ import { APP_NAME } from '../constants'; test.describe('client - pageload performance', () => { test('should send pageload transaction', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance'; + return transactionEvent.transaction === '/performance' && transactionEvent.contexts?.trace?.op === 'pageload'; }); await page.goto(`/performance`); @@ -55,7 +55,9 @@ test.describe('client - pageload performance', () => { test('should update pageload transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && transactionEvent.contexts?.trace?.op === 'pageload' + ); }); await page.goto(`/performance/with/sentry`); @@ -105,7 +107,9 @@ test.describe('client - pageload performance', () => { test('should send pageload transaction for prerendered pages', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/static'; + return ( + transactionEvent.transaction === '/performance/static' && transactionEvent.contexts?.trace?.op === 'pageload' + ); }); await page.goto(`/performance/static`); diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/navigation.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/navigation.client.test.ts index 9e9891bd9306..3e44c612b462 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/navigation.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/navigation.client.test.ts @@ -5,7 +5,9 @@ import { APP_NAME } from '../constants'; test.describe('client - navigation performance', () => { test('should create navigation transaction', async ({ page }) => { const navigationPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/ssr'; + return ( + transactionEvent.transaction === '/performance/ssr' && transactionEvent.contexts?.trace?.op === 'navigation' + ); }); await page.goto(`/performance`); // pageload @@ -56,7 +58,10 @@ test.describe('client - navigation performance', () => { test('should update navigation transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'navigation' + ); }); await page.goto(`/performance`); // pageload diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/pageload.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/pageload.client.test.ts index b374c0ce4642..7c27e26152be 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/pageload.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/pageload.client.test.ts @@ -5,7 +5,7 @@ import { APP_NAME } from '../constants'; test.describe('client - pageload performance', () => { test('should send pageload transaction', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance'; + return transactionEvent.transaction === '/performance' && transactionEvent.contexts?.trace?.op === 'pageload'; }); await page.goto(`/performance`); @@ -55,7 +55,9 @@ test.describe('client - pageload performance', () => { test('should update pageload transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && transactionEvent.contexts?.trace?.op === 'pageload' + ); }); await page.goto(`/performance/with/sentry`); @@ -105,7 +107,9 @@ test.describe('client - pageload performance', () => { test('should send pageload transaction for prerendered pages', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/static'; + return ( + transactionEvent.transaction === '/performance/static' && transactionEvent.contexts?.trace?.op === 'pageload' + ); }); await page.goto(`/performance/static`); diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/navigation.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/navigation.client.test.ts index c30be5a32564..eccddaf77f04 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/navigation.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/navigation.client.test.ts @@ -5,7 +5,10 @@ import { APP_NAME } from '../constants'; test.describe('client - navigation performance', () => { test('should update navigation transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'navigation' + ); }); await page.goto(`/performance`); // pageload diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/pageload.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/pageload.client.test.ts index 224a466ece66..9a2291c36f6f 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/pageload.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/pageload.client.test.ts @@ -5,7 +5,7 @@ import { APP_NAME } from '../constants'; test.describe('client - pageload performance', () => { test('should send pageload transaction', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance'; + return transactionEvent.transaction === '/performance' && transactionEvent.contexts?.trace?.op === 'pageload'; }); await page.goto(`/performance`); @@ -55,7 +55,9 @@ test.describe('client - pageload performance', () => { test('should update pageload transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && transactionEvent.contexts?.trace?.op === 'pageload' + ); }); await page.goto(`/performance/with/sentry`); diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/navigation.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/navigation.client.test.ts index c30be5a32564..eccddaf77f04 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/navigation.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/navigation.client.test.ts @@ -5,7 +5,10 @@ import { APP_NAME } from '../constants'; test.describe('client - navigation performance', () => { test('should update navigation transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'navigation' + ); }); await page.goto(`/performance`); // pageload diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/pageload.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/pageload.client.test.ts index 224a466ece66..9a2291c36f6f 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/pageload.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/pageload.client.test.ts @@ -5,7 +5,7 @@ import { APP_NAME } from '../constants'; test.describe('client - pageload performance', () => { test('should send pageload transaction', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance'; + return transactionEvent.transaction === '/performance' && transactionEvent.contexts?.trace?.op === 'pageload'; }); await page.goto(`/performance`); @@ -55,7 +55,9 @@ test.describe('client - pageload performance', () => { test('should update pageload transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && transactionEvent.contexts?.trace?.op === 'pageload' + ); }); await page.goto(`/performance/with/sentry`); diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/navigation.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/navigation.client.test.ts index c273b5b55195..a31d716f7120 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/navigation.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/navigation.client.test.ts @@ -5,7 +5,9 @@ import { APP_NAME } from '../constants'; test.describe('client - navigation performance', () => { test('should create navigation transaction', async ({ page }) => { const navigationPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/ssr'; + return ( + transactionEvent.transaction === '/performance/ssr' && transactionEvent.contexts?.trace?.op === 'navigation' + ); }); await page.goto(`/performance`); // pageload @@ -56,7 +58,10 @@ test.describe('client - navigation performance', () => { test('should create navigation transaction when navigating with object `to` prop', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'navigation' + ); }); await page.goto(`/performance`); // pageload @@ -106,7 +111,10 @@ test.describe('client - navigation performance', () => { test('should update navigation transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'navigation' + ); }); await page.goto(`/performance`); // pageload diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/pageload.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/pageload.client.test.ts index b374c0ce4642..7c27e26152be 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/pageload.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/pageload.client.test.ts @@ -5,7 +5,7 @@ import { APP_NAME } from '../constants'; test.describe('client - pageload performance', () => { test('should send pageload transaction', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance'; + return transactionEvent.transaction === '/performance' && transactionEvent.contexts?.trace?.op === 'pageload'; }); await page.goto(`/performance`); @@ -55,7 +55,9 @@ test.describe('client - pageload performance', () => { test('should update pageload transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/with/:param'; + return ( + transactionEvent.transaction === '/performance/with/:param' && transactionEvent.contexts?.trace?.op === 'pageload' + ); }); await page.goto(`/performance/with/sentry`); @@ -105,7 +107,9 @@ test.describe('client - pageload performance', () => { test('should send pageload transaction for prerendered pages', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { - return transactionEvent.transaction === '/performance/static'; + return ( + transactionEvent.transaction === '/performance/static' && transactionEvent.contexts?.trace?.op === 'pageload' + ); }); await page.goto(`/performance/static`); From 53e3ef01cad27491617499c15dcec99dc9c0bc41 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 10 Apr 2026 10:22:29 +0000 Subject: [PATCH 3/3] fix(e2e): Run yarn format to fix formatting issues Co-Authored-By: Claude Agent-Logs-Url: https://github.com/getsentry/sentry-javascript/sessions/3dbdda00-7418-4246-9c57-5cd8a42ee84e Co-authored-by: Lms24 <8420481+Lms24@users.noreply.github.com> --- .../tests/performance/pageload.client.test.ts | 3 ++- .../tests/performance/pageload.client.test.ts | 3 ++- .../tests/performance/pageload.client.test.ts | 3 ++- .../tests/performance/pageload.client.test.ts | 3 ++- .../tests/performance/pageload.client.test.ts | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/pageload.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/pageload.client.test.ts index 7c27e26152be..3095f720eb71 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/pageload.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-custom/tests/performance/pageload.client.test.ts @@ -56,7 +56,8 @@ test.describe('client - pageload performance', () => { test('should update pageload transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { return ( - transactionEvent.transaction === '/performance/with/:param' && transactionEvent.contexts?.trace?.op === 'pageload' + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'pageload' ); }); diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/pageload.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/pageload.client.test.ts index 7c27e26152be..3095f720eb71 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/pageload.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-node-20-18/tests/performance/pageload.client.test.ts @@ -56,7 +56,8 @@ test.describe('client - pageload performance', () => { test('should update pageload transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { return ( - transactionEvent.transaction === '/performance/with/:param' && transactionEvent.contexts?.trace?.op === 'pageload' + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'pageload' ); }); diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/pageload.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/pageload.client.test.ts index 9a2291c36f6f..d32fd24c75a6 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/pageload.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa-node-20-18/tests/performance/pageload.client.test.ts @@ -56,7 +56,8 @@ test.describe('client - pageload performance', () => { test('should update pageload transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { return ( - transactionEvent.transaction === '/performance/with/:param' && transactionEvent.contexts?.trace?.op === 'pageload' + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'pageload' ); }); diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/pageload.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/pageload.client.test.ts index 9a2291c36f6f..d32fd24c75a6 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/pageload.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework-spa/tests/performance/pageload.client.test.ts @@ -56,7 +56,8 @@ test.describe('client - pageload performance', () => { test('should update pageload transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { return ( - transactionEvent.transaction === '/performance/with/:param' && transactionEvent.contexts?.trace?.op === 'pageload' + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'pageload' ); }); diff --git a/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/pageload.client.test.ts b/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/pageload.client.test.ts index 7c27e26152be..3095f720eb71 100644 --- a/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/pageload.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/react-router-7-framework/tests/performance/pageload.client.test.ts @@ -56,7 +56,8 @@ test.describe('client - pageload performance', () => { test('should update pageload transaction for dynamic routes', async ({ page }) => { const txPromise = waitForTransaction(APP_NAME, async transactionEvent => { return ( - transactionEvent.transaction === '/performance/with/:param' && transactionEvent.contexts?.trace?.op === 'pageload' + transactionEvent.transaction === '/performance/with/:param' && + transactionEvent.contexts?.trace?.op === 'pageload' ); });