diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b8e3fcafcb34..e2ec7fdcf411 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -685,7 +685,7 @@ jobs:
yarn test
job_remix_integration_tests:
- name: Remix (Node ${{ matrix.node }}) Tests
+ name: Remix v${{ matrix.remix }} (Node ${{ matrix.node }}) Tests
needs: [job_get_metadata, job_build]
if: needs.job_get_metadata.outputs.changed_remix == 'true' || github.event_name != 'pull_request'
runs-on: ubuntu-20.04
@@ -694,6 +694,7 @@ jobs:
fail-fast: false
matrix:
node: [14, 16, 18]
+ remix: [1, 2]
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
uses: actions/checkout@v3
@@ -710,6 +711,7 @@ jobs:
- name: Run integration tests
env:
NODE_VERSION: ${{ matrix.node }}
+ REMIX_VERSION: ${{ matrix.remix }}
run: |
cd packages/remix
yarn test:integration:ci
diff --git a/packages/remix/package.json b/packages/remix/package.json
index e964b237149c..a9bf20778ea8 100644
--- a/packages/remix/package.json
+++ b/packages/remix/package.json
@@ -59,7 +59,9 @@
"lint:eslint": "eslint . --format stylish",
"lint:prettier": "prettier --check \"{src,test,scripts}/**/**.ts\"",
"test": "yarn test:unit",
- "test:integration": "run-s test:integration:clean test:integration:prepare test:integration:client test:integration:server",
+ "test:integration": "run-s test:integration:v1 test:integration:v2",
+ "test:integration:v1": "run-s test:integration:clean test:integration:prepare test:integration:client test:integration:server",
+ "test:integration:v2": "export REMIX_VERSION=2 && run-s test:integration:v1",
"test:integration:ci": "run-s test:integration:clean test:integration:prepare test:integration:client:ci test:integration:server",
"test:integration:prepare": "(cd test/integration && yarn)",
"test:integration:clean": "(cd test/integration && rimraf .cache node_modules build)",
diff --git a/packages/remix/test/integration/app/entry.client.tsx b/packages/remix/test/integration/app_v1/entry.client.tsx
similarity index 100%
rename from packages/remix/test/integration/app/entry.client.tsx
rename to packages/remix/test/integration/app_v1/entry.client.tsx
diff --git a/packages/remix/test/integration/app/entry.server.tsx b/packages/remix/test/integration/app_v1/entry.server.tsx
similarity index 100%
rename from packages/remix/test/integration/app/entry.server.tsx
rename to packages/remix/test/integration/app_v1/entry.server.tsx
diff --git a/packages/remix/test/integration/app/root.tsx b/packages/remix/test/integration/app_v1/root.tsx
similarity index 100%
rename from packages/remix/test/integration/app/root.tsx
rename to packages/remix/test/integration/app_v1/root.tsx
diff --git a/packages/remix/test/integration/app_v1/routes/action-json-response/$id.tsx b/packages/remix/test/integration/app_v1/routes/action-json-response/$id.tsx
new file mode 100644
index 000000000000..ed034a14c52a
--- /dev/null
+++ b/packages/remix/test/integration/app_v1/routes/action-json-response/$id.tsx
@@ -0,0 +1,2 @@
+export * from '../../../common/routes/action-json-response.$id';
+export { default } from '../../../common/routes/action-json-response.$id';
diff --git a/packages/remix/test/integration/app_v1/routes/capture-exception.tsx b/packages/remix/test/integration/app_v1/routes/capture-exception.tsx
new file mode 100644
index 000000000000..1ba745d2e63d
--- /dev/null
+++ b/packages/remix/test/integration/app_v1/routes/capture-exception.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/capture-exception';
+export { default } from '../../common/routes/capture-exception';
diff --git a/packages/remix/test/integration/app_v1/routes/capture-message.tsx b/packages/remix/test/integration/app_v1/routes/capture-message.tsx
new file mode 100644
index 000000000000..9dae2318cc14
--- /dev/null
+++ b/packages/remix/test/integration/app_v1/routes/capture-message.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/capture-message';
+export { default } from '../../common/routes/capture-message';
diff --git a/packages/remix/test/integration/app_v1/routes/error-boundary-capture/$id.tsx b/packages/remix/test/integration/app_v1/routes/error-boundary-capture/$id.tsx
new file mode 100644
index 000000000000..2c287dfe9696
--- /dev/null
+++ b/packages/remix/test/integration/app_v1/routes/error-boundary-capture/$id.tsx
@@ -0,0 +1,2 @@
+export * from '../../../common/routes/error-boundary-capture.$id';
+export { default } from '../../../common/routes/error-boundary-capture.$id';
diff --git a/packages/remix/test/integration/app_v1/routes/index.tsx b/packages/remix/test/integration/app_v1/routes/index.tsx
new file mode 100644
index 000000000000..22c086a4c2cf
--- /dev/null
+++ b/packages/remix/test/integration/app_v1/routes/index.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/index';
+export { default } from '../../common/routes/index';
diff --git a/packages/remix/test/integration/app_v1/routes/loader-defer-response/index.tsx b/packages/remix/test/integration/app_v1/routes/loader-defer-response/index.tsx
new file mode 100644
index 000000000000..fd3a7b3f898d
--- /dev/null
+++ b/packages/remix/test/integration/app_v1/routes/loader-defer-response/index.tsx
@@ -0,0 +1,2 @@
+export * from '../../../common/routes/loader-defer-response';
+export { default } from '../../../common/routes/loader-defer-response';
diff --git a/packages/remix/test/integration/app_v1/routes/loader-json-response/$id.tsx b/packages/remix/test/integration/app_v1/routes/loader-json-response/$id.tsx
new file mode 100644
index 000000000000..ddf33953d77d
--- /dev/null
+++ b/packages/remix/test/integration/app_v1/routes/loader-json-response/$id.tsx
@@ -0,0 +1,2 @@
+export * from '../../../common/routes/loader-json-response.$id';
+export { default } from '../../../common/routes/loader-json-response.$id';
diff --git a/packages/remix/test/integration/app_v1/routes/manual-tracing/$id.tsx b/packages/remix/test/integration/app_v1/routes/manual-tracing/$id.tsx
new file mode 100644
index 000000000000..9979714818ff
--- /dev/null
+++ b/packages/remix/test/integration/app_v1/routes/manual-tracing/$id.tsx
@@ -0,0 +1,2 @@
+export * from '../../../common/routes/manual-tracing.$id';
+export { default } from '../../../common/routes/manual-tracing.$id';
diff --git a/packages/remix/test/integration/app_v1/routes/scope-bleed/$id.tsx b/packages/remix/test/integration/app_v1/routes/scope-bleed/$id.tsx
new file mode 100644
index 000000000000..d86864dccb9b
--- /dev/null
+++ b/packages/remix/test/integration/app_v1/routes/scope-bleed/$id.tsx
@@ -0,0 +1,2 @@
+export * from '../../../common/routes/scope-bleed.$id';
+export { default } from '../../../common/routes/scope-bleed.$id';
diff --git a/packages/remix/test/integration/app_v2/entry.client.tsx b/packages/remix/test/integration/app_v2/entry.client.tsx
new file mode 100644
index 000000000000..f9cfc14f2507
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/entry.client.tsx
@@ -0,0 +1,16 @@
+import { RemixBrowser, useLocation, useMatches } from '@remix-run/react';
+import { hydrate } from 'react-dom';
+import * as Sentry from '@sentry/remix';
+import { useEffect } from 'react';
+
+Sentry.init({
+ dsn: 'https://public@dsn.ingest.sentry.io/1337',
+ tracesSampleRate: 1,
+ integrations: [
+ new Sentry.BrowserTracing({
+ routingInstrumentation: Sentry.remixRouterInstrumentation(useEffect, useLocation, useMatches),
+ }),
+ ],
+});
+
+hydrate(, document);
diff --git a/packages/remix/test/integration/app_v2/entry.server.tsx b/packages/remix/test/integration/app_v2/entry.server.tsx
new file mode 100644
index 000000000000..ae879492e236
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/entry.server.tsx
@@ -0,0 +1,27 @@
+import type { EntryContext } from '@remix-run/node';
+import { RemixServer } from '@remix-run/react';
+import { renderToString } from 'react-dom/server';
+import * as Sentry from '@sentry/remix';
+
+Sentry.init({
+ dsn: 'https://public@dsn.ingest.sentry.io/1337',
+ tracesSampleRate: 1,
+ // Disabling to test series of envelopes deterministically.
+ autoSessionTracking: false,
+});
+
+export default function handleRequest(
+ request: Request,
+ responseStatusCode: number,
+ responseHeaders: Headers,
+ remixContext: EntryContext,
+) {
+ let markup = renderToString();
+
+ responseHeaders.set('Content-Type', 'text/html');
+
+ return new Response('' + markup, {
+ status: responseStatusCode,
+ headers: responseHeaders,
+ });
+}
diff --git a/packages/remix/test/integration/app_v2/root.tsx b/packages/remix/test/integration/app_v2/root.tsx
new file mode 100644
index 000000000000..faf075951d69
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/root.tsx
@@ -0,0 +1,60 @@
+import { V2_MetaFunction, LoaderFunction, json, defer, redirect } from '@remix-run/node';
+import { Links, LiveReload, Meta, Outlet, Scripts, ScrollRestoration } from '@remix-run/react';
+import { withSentry } from '@sentry/remix';
+
+export const meta: V2_MetaFunction = ({ data }) => [
+ { charset: 'utf-8' },
+ { title: 'New Remix App' },
+ { name: 'viewport', content: 'width=device-width,initial-scale=1' },
+ { name: 'sentry-trace', content: data.sentryTrace },
+ { name: 'baggage', content: data.sentryBaggage },
+];
+
+export const loader: LoaderFunction = async ({ request }) => {
+ const url = new URL(request.url);
+ const type = url.searchParams.get('type');
+
+ switch (type) {
+ case 'empty':
+ return {};
+ case 'plain':
+ return {
+ data_one: [],
+ data_two: 'a string',
+ };
+ case 'json':
+ return json({ data_one: [], data_two: 'a string' }, { headers: { 'Cache-Control': 'max-age=300' } });
+ case 'defer':
+ return defer({ data_one: [], data_two: 'a string' });
+ case 'null':
+ return null;
+ case 'undefined':
+ return undefined;
+ case 'throwRedirect':
+ throw redirect('/?type=plain');
+ case 'returnRedirect':
+ return redirect('/?type=plain');
+ default: {
+ return {};
+ }
+ }
+};
+
+function App() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default withSentry(App);
diff --git a/packages/remix/test/integration/app_v2/routes/action-json-response.$id.tsx b/packages/remix/test/integration/app_v2/routes/action-json-response.$id.tsx
new file mode 100644
index 000000000000..7a00bfb2bfe7
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/routes/action-json-response.$id.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/action-json-response.$id';
+export { default } from '../../common/routes/action-json-response.$id';
diff --git a/packages/remix/test/integration/app_v2/routes/capture-exception.tsx b/packages/remix/test/integration/app_v2/routes/capture-exception.tsx
new file mode 100644
index 000000000000..1ba745d2e63d
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/routes/capture-exception.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/capture-exception';
+export { default } from '../../common/routes/capture-exception';
diff --git a/packages/remix/test/integration/app_v2/routes/capture-message.tsx b/packages/remix/test/integration/app_v2/routes/capture-message.tsx
new file mode 100644
index 000000000000..9dae2318cc14
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/routes/capture-message.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/capture-message';
+export { default } from '../../common/routes/capture-message';
diff --git a/packages/remix/test/integration/app_v2/routes/error-boundary-capture.$id.tsx b/packages/remix/test/integration/app_v2/routes/error-boundary-capture.$id.tsx
new file mode 100644
index 000000000000..011f92462069
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/routes/error-boundary-capture.$id.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/error-boundary-capture.$id';
+export { default } from '../../common/routes/error-boundary-capture.$id';
diff --git a/packages/remix/test/integration/app_v2/routes/index.tsx b/packages/remix/test/integration/app_v2/routes/index.tsx
new file mode 100644
index 000000000000..22c086a4c2cf
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/routes/index.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/index';
+export { default } from '../../common/routes/index';
diff --git a/packages/remix/test/integration/app_v2/routes/loader-defer-response.tsx b/packages/remix/test/integration/app_v2/routes/loader-defer-response.tsx
new file mode 100644
index 000000000000..38415a9a3781
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/routes/loader-defer-response.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/loader-defer-response';
+export { default } from '../../common/routes/loader-defer-response';
diff --git a/packages/remix/test/integration/app_v2/routes/loader-json-response.$id.tsx b/packages/remix/test/integration/app_v2/routes/loader-json-response.$id.tsx
new file mode 100644
index 000000000000..7761875bdb76
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/routes/loader-json-response.$id.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/loader-json-response.$id';
+export { default } from '../../common/routes/loader-json-response.$id';
diff --git a/packages/remix/test/integration/app_v2/routes/manual-tracing.$id.tsx b/packages/remix/test/integration/app_v2/routes/manual-tracing.$id.tsx
new file mode 100644
index 000000000000..a7cfebe4ed46
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/routes/manual-tracing.$id.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/manual-tracing.$id';
+export { default } from '../../common/routes/manual-tracing.$id';
diff --git a/packages/remix/test/integration/app_v2/routes/scope-bleed.$id.tsx b/packages/remix/test/integration/app_v2/routes/scope-bleed.$id.tsx
new file mode 100644
index 000000000000..5ba2376f0339
--- /dev/null
+++ b/packages/remix/test/integration/app_v2/routes/scope-bleed.$id.tsx
@@ -0,0 +1,2 @@
+export * from '../../common/routes/scope-bleed.$id';
+export { default } from '../../common/routes/scope-bleed.$id';
diff --git a/packages/remix/test/integration/app/routes/action-json-response/$id.tsx b/packages/remix/test/integration/common/routes/action-json-response.$id.tsx
similarity index 100%
rename from packages/remix/test/integration/app/routes/action-json-response/$id.tsx
rename to packages/remix/test/integration/common/routes/action-json-response.$id.tsx
diff --git a/packages/remix/test/integration/app/routes/capture-exception.tsx b/packages/remix/test/integration/common/routes/capture-exception.tsx
similarity index 100%
rename from packages/remix/test/integration/app/routes/capture-exception.tsx
rename to packages/remix/test/integration/common/routes/capture-exception.tsx
diff --git a/packages/remix/test/integration/app/routes/capture-message.tsx b/packages/remix/test/integration/common/routes/capture-message.tsx
similarity index 89%
rename from packages/remix/test/integration/app/routes/capture-message.tsx
rename to packages/remix/test/integration/common/routes/capture-message.tsx
index 459e25e1b4ee..06e92f79e931 100644
--- a/packages/remix/test/integration/app/routes/capture-message.tsx
+++ b/packages/remix/test/integration/common/routes/capture-message.tsx
@@ -3,5 +3,5 @@ import * as Sentry from '@sentry/remix';
export default function ErrorBoundaryCapture() {
Sentry.captureMessage('Sentry Manually Captured Message');
- return ;
+ return ;
}
diff --git a/packages/remix/test/integration/app/routes/error-boundary-capture/$id.tsx b/packages/remix/test/integration/common/routes/error-boundary-capture.$id.tsx
similarity index 100%
rename from packages/remix/test/integration/app/routes/error-boundary-capture/$id.tsx
rename to packages/remix/test/integration/common/routes/error-boundary-capture.$id.tsx
diff --git a/packages/remix/test/integration/app/routes/index.tsx b/packages/remix/test/integration/common/routes/index.tsx
similarity index 100%
rename from packages/remix/test/integration/app/routes/index.tsx
rename to packages/remix/test/integration/common/routes/index.tsx
diff --git a/packages/remix/test/integration/app/routes/loader-defer-response/index.tsx b/packages/remix/test/integration/common/routes/loader-defer-response.tsx
similarity index 100%
rename from packages/remix/test/integration/app/routes/loader-defer-response/index.tsx
rename to packages/remix/test/integration/common/routes/loader-defer-response.tsx
diff --git a/packages/remix/test/integration/app/routes/loader-json-response/$id.tsx b/packages/remix/test/integration/common/routes/loader-json-response.$id.tsx
similarity index 100%
rename from packages/remix/test/integration/app/routes/loader-json-response/$id.tsx
rename to packages/remix/test/integration/common/routes/loader-json-response.$id.tsx
diff --git a/packages/remix/test/integration/app/routes/manual-tracing/$id.tsx b/packages/remix/test/integration/common/routes/manual-tracing.$id.tsx
similarity index 91%
rename from packages/remix/test/integration/app/routes/manual-tracing/$id.tsx
rename to packages/remix/test/integration/common/routes/manual-tracing.$id.tsx
index 75cf8574819a..2f925881b9cf 100644
--- a/packages/remix/test/integration/app/routes/manual-tracing/$id.tsx
+++ b/packages/remix/test/integration/common/routes/manual-tracing.$id.tsx
@@ -3,5 +3,5 @@ import * as Sentry from '@sentry/remix';
export default function ManualTracing() {
const transaction = Sentry.startTransaction({ name: 'test_transaction_1' });
transaction.finish();
- return ;
+ return ;
}
diff --git a/packages/remix/test/integration/app/routes/scope-bleed/$id.tsx b/packages/remix/test/integration/common/routes/scope-bleed.$id.tsx
similarity index 100%
rename from packages/remix/test/integration/app/routes/scope-bleed/$id.tsx
rename to packages/remix/test/integration/common/routes/scope-bleed.$id.tsx
diff --git a/packages/remix/test/integration/remix.config.js b/packages/remix/test/integration/remix.config.js
index 02f847cbf1ca..b4c7ac0837b8 100644
--- a/packages/remix/test/integration/remix.config.js
+++ b/packages/remix/test/integration/remix.config.js
@@ -1,7 +1,16 @@
/** @type {import('@remix-run/dev').AppConfig} */
+const useV2 = process.env.REMIX_VERSION === '2';
+
module.exports = {
- appDirectory: 'app',
+ appDirectory: useV2 ? 'app_v2' : 'app_v1',
assetsBuildDirectory: 'public/build',
serverBuildPath: 'build/index.js',
publicPath: '/build/',
+ future: {
+ v2_errorBoundary: useV2,
+ v2_headers: useV2,
+ v2_meta: useV2,
+ v2_normalizeFormMethod: useV2,
+ v2_routeConvention: useV2,
+ },
};
diff --git a/packages/remix/test/integration/test/client/errorboundary.test.ts b/packages/remix/test/integration/test/client/errorboundary.test.ts
index 6bf6314095fd..b90b3e8d3eaa 100644
--- a/packages/remix/test/integration/test/client/errorboundary.test.ts
+++ b/packages/remix/test/integration/test/client/errorboundary.test.ts
@@ -2,6 +2,8 @@ import { getMultipleSentryEnvelopeRequests } from './utils/helpers';
import { test, expect } from '@playwright/test';
import { Event } from '@sentry/types';
+const useV2 = process.env.REMIX_VERSION === '2';
+
test('should capture React component errors.', async ({ page }) => {
const envelopes = await getMultipleSentryEnvelopeRequests(page, 2, {
url: '/error-boundary-capture/0',
@@ -12,7 +14,9 @@ test('should capture React component errors.', async ({ page }) => {
expect(pageloadEnvelope.contexts?.trace.op).toBe('pageload');
expect(pageloadEnvelope.tags?.['routing.instrumentation']).toBe('remix-router');
expect(pageloadEnvelope.type).toBe('transaction');
- expect(pageloadEnvelope.transaction).toBe('routes/error-boundary-capture/$id');
+ expect(pageloadEnvelope.transaction).toBe(
+ useV2 ? 'routes/error-boundary-capture.$id' : 'routes/error-boundary-capture/$id',
+ );
expect(errorEnvelope.level).toBe('error');
expect(errorEnvelope.sdk?.name).toBe('sentry.javascript.remix');
diff --git a/packages/remix/test/integration/test/client/manualtracing.test.ts b/packages/remix/test/integration/test/client/manualtracing.test.ts
index edc919d2d4a9..424408e7be9d 100644
--- a/packages/remix/test/integration/test/client/manualtracing.test.ts
+++ b/packages/remix/test/integration/test/client/manualtracing.test.ts
@@ -2,6 +2,8 @@ import { getMultipleSentryEnvelopeRequests } from './utils/helpers';
import { test, expect } from '@playwright/test';
import { Event } from '@sentry/types';
+const useV2 = process.env.REMIX_VERSION === '2';
+
test('should report a manually created / finished transaction.', async ({ page }) => {
const envelopes = await getMultipleSentryEnvelopeRequests(page, 2, {
url: '/manual-tracing/0',
@@ -17,5 +19,5 @@ test('should report a manually created / finished transaction.', async ({ page }
expect(pageloadEnvelope.contexts?.trace?.op).toBe('pageload');
expect(pageloadEnvelope.tags?.['routing.instrumentation']).toBe('remix-router');
expect(pageloadEnvelope.type).toBe('transaction');
- expect(pageloadEnvelope.transaction).toBe('routes/manual-tracing/$id');
+ expect(pageloadEnvelope.transaction).toBe(useV2 ? 'routes/manual-tracing.$id' : 'routes/manual-tracing/$id');
});
diff --git a/packages/remix/test/integration/test/client/pageload.test.ts b/packages/remix/test/integration/test/client/pageload.test.ts
index 1543bd2a342c..7c49e4ac9c8c 100644
--- a/packages/remix/test/integration/test/client/pageload.test.ts
+++ b/packages/remix/test/integration/test/client/pageload.test.ts
@@ -1,3 +1,5 @@
+const useV2 = process.env.REMIX_VERSION === '2';
+
import { getFirstSentryEnvelopeRequest } from './utils/helpers';
import { test, expect } from '@playwright/test';
import { Event } from '@sentry/types';
@@ -8,5 +10,6 @@ test('should add `pageload` transaction on load.', async ({ page }) => {
expect(envelope.contexts?.trace.op).toBe('pageload');
expect(envelope.tags?.['routing.instrumentation']).toBe('remix-router');
expect(envelope.type).toBe('transaction');
- expect(envelope.transaction).toBe('routes/index');
+
+ expect(envelope.transaction).toBe(useV2 ? 'root' : 'routes/index');
});
diff --git a/packages/remix/test/integration/test/server/action.test.ts b/packages/remix/test/integration/test/server/action.test.ts
index 6bb4b74d3540..664162f2076d 100644
--- a/packages/remix/test/integration/test/server/action.test.ts
+++ b/packages/remix/test/integration/test/server/action.test.ts
@@ -1,5 +1,7 @@
import { assertSentryTransaction, assertSentryEvent, RemixTestEnv } from './utils/helpers';
+const useV2 = process.env.REMIX_VERSION === '2';
+
jest.spyOn(console, 'error').mockImplementation();
// Repeat tests for each adapter
@@ -11,10 +13,10 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada
const transaction = envelope[2];
assertSentryTransaction(transaction, {
- transaction: 'routes/action-json-response/$id',
+ transaction: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
spans: [
{
- description: 'routes/action-json-response/$id',
+ description: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
op: 'function.remix.action',
},
{
@@ -22,11 +24,11 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada
op: 'function.remix.loader',
},
{
- description: 'routes/action-json-response/$id',
+ description: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
op: 'function.remix.loader',
},
{
- description: 'routes/action-json-response/$id',
+ description: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
op: 'function.remix.document_request',
},
],
@@ -102,7 +104,7 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada
const [event] = envelopes.filter(envelope => envelope[1].type === 'event');
assertSentryTransaction(transaction[2], {
- transaction: 'routes/action-json-response/$id',
+ transaction: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
request: {
method: 'POST',
url,
@@ -161,7 +163,7 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada
},
},
tags: {
- transaction: 'routes/action-json-response/$id',
+ transaction: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
},
});
@@ -177,7 +179,7 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada
},
},
tags: {
- transaction: 'routes/action-json-response/$id',
+ transaction: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
},
});
@@ -227,7 +229,7 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada
},
},
tags: {
- transaction: 'routes/action-json-response/$id',
+ transaction: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
},
});
@@ -277,7 +279,7 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada
},
},
tags: {
- transaction: 'routes/action-json-response/$id',
+ transaction: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
},
});
@@ -327,7 +329,7 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada
},
},
tags: {
- transaction: 'routes/action-json-response/$id',
+ transaction: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
},
});
@@ -377,7 +379,7 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada
},
},
tags: {
- transaction: 'routes/action-json-response/$id',
+ transaction: `routes/action-json-response${useV2 ? '.' : '/'}$id`,
},
});
diff --git a/packages/remix/test/integration/test/server/loader.test.ts b/packages/remix/test/integration/test/server/loader.test.ts
index 2545f63d6e92..9613d19fce42 100644
--- a/packages/remix/test/integration/test/server/loader.test.ts
+++ b/packages/remix/test/integration/test/server/loader.test.ts
@@ -1,6 +1,8 @@
import { assertSentryTransaction, RemixTestEnv, assertSentryEvent } from './utils/helpers';
import { Event } from '@sentry/types';
+const useV2 = process.env.REMIX_VERSION === '2';
+
jest.spyOn(console, 'error').mockImplementation();
// Repeat tests for each adapter
@@ -52,7 +54,7 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada
const transaction = envelope[2];
assertSentryTransaction(transaction, {
- transaction: 'routes/loader-json-response/$id',
+ transaction: `routes/loader-json-response${useV2 ? '.' : '/'}$id`,
transaction_info: {
source: 'route',
},
@@ -62,11 +64,11 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada
op: 'function.remix.loader',
},
{
- description: 'routes/loader-json-response/$id',
+ description: `routes/loader-json-response${useV2 ? '.' : '/'}$id`,
op: 'function.remix.loader',
},
{
- description: 'routes/loader-json-response/$id',
+ description: `routes/loader-json-response${useV2 ? '.' : '/'}$id`,
op: 'function.remix.document_request',
},
],
@@ -98,7 +100,7 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada
},
},
tags: {
- transaction: 'routes/loader-json-response/$id',
+ transaction: `routes/loader-json-response${useV2 ? '.' : '/'}$id`,
},
});
@@ -114,7 +116,7 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada
},
},
tags: {
- transaction: 'routes/loader-json-response/$id',
+ transaction: `routes/loader-json-response${useV2 ? '.' : '/'}$id`,
},
});
@@ -195,24 +197,39 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada
const transaction = envelope[2];
assertSentryTransaction(transaction, {
- transaction: 'root',
+ transaction: useV2 ? 'routes/loader-defer-response' : 'root',
transaction_info: {
source: 'route',
},
- spans: [
- {
- description: 'root',
- op: 'function.remix.loader',
- },
- {
- description: 'routes/loader-defer-response/index',
- op: 'function.remix.loader',
- },
- {
- description: 'root',
- op: 'function.remix.document_request',
- },
- ],
+ spans: useV2
+ ? [
+ {
+ description: 'root',
+ op: 'function.remix.loader',
+ },
+ {
+ description: 'routes/loader-defer-response',
+ op: 'function.remix.loader',
+ },
+ {
+ description: 'routes/loader-defer-response',
+ op: 'function.remix.document_request',
+ },
+ ]
+ : [
+ {
+ description: 'root',
+ op: 'function.remix.loader',
+ },
+ {
+ description: 'routes/loader-defer-response/index',
+ op: 'function.remix.loader',
+ },
+ {
+ description: 'root',
+ op: 'function.remix.document_request',
+ },
+ ],
});
});
});
diff --git a/packages/remix/test/integration/tsconfig.json b/packages/remix/test/integration/tsconfig.json
index 2129c1a599f6..f190b5da307f 100644
--- a/packages/remix/test/integration/tsconfig.json
+++ b/packages/remix/test/integration/tsconfig.json
@@ -13,7 +13,7 @@
"forceConsistentCasingInFileNames": true,
"baseUrl": ".",
"paths": {
- "~/*": ["./app/*"]
+ "~/*": ["app_v1/*", "app_v2/*"]
},
"noEmit": true
}