diff --git a/dev-packages/node-integration-tests/package.json b/dev-packages/node-integration-tests/package.json
index e23491383d66..b393851d68d4 100644
--- a/dev-packages/node-integration-tests/package.json
+++ b/dev-packages/node-integration-tests/package.json
@@ -39,7 +39,6 @@
"ai": "^4.0.6",
"amqplib": "^0.10.7",
"apollo-server": "^3.11.1",
- "axios": "^1.7.7",
"body-parser": "^1.20.3",
"connect": "^3.7.0",
"cors": "^2.8.5",
diff --git a/dev-packages/node-integration-tests/suites/express-v5/tracing/test.ts b/dev-packages/node-integration-tests/suites/express-v5/tracing/test.ts
index cf20276f4fc2..5318609f664a 100644
--- a/dev-packages/node-integration-tests/suites/express-v5/tracing/test.ts
+++ b/dev-packages/node-integration-tests/suites/express-v5/tracing/test.ts
@@ -79,8 +79,8 @@ describe('express tracing', () => {
test.each([['array1'], ['array5']])(
'should set a correct transaction name for routes consisting of arrays of routes for %p',
- ((segment: string, done: () => void) => {
- createRunner(__dirname, 'server.js')
+ async (segment: string) => {
+ const runner = await createRunner(__dirname, 'server.js')
.expect({
transaction: {
transaction: 'GET /test/array1,/\\/test\\/array[2-9]/',
@@ -101,9 +101,10 @@ describe('express tracing', () => {
},
},
})
- .start(done)
- .makeRequest('get', `/test/${segment}`);
- }) as any,
+ .start();
+ await runner.makeRequest('get', `/test/${segment}`);
+ await runner.completed();
+ },
);
test.each([
@@ -113,8 +114,8 @@ describe('express tracing', () => {
['arr/requiredPath'],
['arr/required/lastParam'],
['arr55/required/lastParam'],
- ])('should handle more complex regexes in route arrays correctly for %p', ((segment: string, done: () => void) => {
- createRunner(__dirname, 'server.js')
+ ])('should handle more complex regexes in route arrays correctly for %p', async (segment: string) => {
+ const runner = await createRunner(__dirname, 'server.js')
.expect({
transaction: {
transaction: 'GET /test/arr/:id,/\\/test\\/arr[0-9]*\\/required(path)?(\\/optionalPath)?\\/(lastParam)?/',
@@ -135,9 +136,10 @@ describe('express tracing', () => {
},
},
})
- .start(done)
- .makeRequest('get', `/test/${segment}`);
- }) as any);
+ .start();
+ await runner.makeRequest('get', `/test/${segment}`);
+ await runner.completed();
+ });
describe('request data', () => {
test('correctly captures JSON request data', async () => {
@@ -161,7 +163,12 @@ describe('express tracing', () => {
})
.start();
- runner.makeRequest('post', '/test-post', { data: { foo: 'bar', other: 1 } });
+ runner.makeRequest('post', '/test-post', {
+ data: JSON.stringify({ foo: 'bar', other: 1 }),
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ });
await runner.completed();
});
diff --git a/dev-packages/node-integration-tests/suites/express-v5/without-tracing/test.ts b/dev-packages/node-integration-tests/suites/express-v5/without-tracing/test.ts
index 5dc6aedecbd4..5286ab8d2953 100644
--- a/dev-packages/node-integration-tests/suites/express-v5/without-tracing/test.ts
+++ b/dev-packages/node-integration-tests/suites/express-v5/without-tracing/test.ts
@@ -54,7 +54,12 @@ describe('express without tracing', () => {
})
.start();
- runner.makeRequest('post', '/test-post', { data: { foo: 'bar', other: 1 } });
+ runner.makeRequest('post', '/test-post', {
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: JSON.stringify({ foo: 'bar', other: 1 }),
+ });
await runner.completed();
});
diff --git a/dev-packages/node-integration-tests/suites/express/tracing/test.ts b/dev-packages/node-integration-tests/suites/express/tracing/test.ts
index 109bab2e659c..c32ccb04d12a 100644
--- a/dev-packages/node-integration-tests/suites/express/tracing/test.ts
+++ b/dev-packages/node-integration-tests/suites/express/tracing/test.ts
@@ -80,8 +80,8 @@ describe('express tracing', () => {
test.each([['array1'], ['array5']])(
'should set a correct transaction name for routes consisting of arrays of routes for %p',
- ((segment: string, done: () => void) => {
- createRunner(__dirname, 'server.js')
+ async (segment: string) => {
+ const runner = await createRunner(__dirname, 'server.js')
.expect({
transaction: {
transaction: 'GET /test/array1,/\\/test\\/array[2-9]/',
@@ -102,9 +102,10 @@ describe('express tracing', () => {
},
},
})
- .start(done)
- .makeRequest('get', `/test/${segment}`);
- }) as any,
+ .start();
+ await runner.makeRequest('get', `/test/${segment}`);
+ await runner.completed();
+ },
);
test.each([
@@ -116,8 +117,8 @@ describe('express tracing', () => {
['arr55/required/lastParam'],
['arr/requiredPath/optionalPath/'],
['arr/requiredPath/optionalPath/lastParam'],
- ])('should handle more complex regexes in route arrays correctly for %p', ((segment: string, done: () => void) => {
- createRunner(__dirname, 'server.js')
+ ])('should handle more complex regexes in route arrays correctly for %p', async (segment: string) => {
+ const runner = await createRunner(__dirname, 'server.js')
.expect({
transaction: {
transaction: 'GET /test/arr/:id,/\\/test\\/arr[0-9]*\\/required(path)?(\\/optionalPath)?\\/(lastParam)?/',
@@ -138,9 +139,10 @@ describe('express tracing', () => {
},
},
})
- .start(done)
- .makeRequest('get', `/test/${segment}`);
- }) as any);
+ .start();
+ await runner.makeRequest('get', `/test/${segment}`);
+ await runner.completed();
+ });
describe('request data', () => {
test('correctly captures JSON request data', async () => {
@@ -164,7 +166,12 @@ describe('express tracing', () => {
})
.start();
- runner.makeRequest('post', '/test-post', { data: { foo: 'bar', other: 1 } });
+ runner.makeRequest('post', '/test-post', {
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: JSON.stringify({ foo: 'bar', other: 1 }),
+ });
await runner.completed();
});
diff --git a/dev-packages/node-integration-tests/suites/express/without-tracing/test.ts b/dev-packages/node-integration-tests/suites/express/without-tracing/test.ts
index 5dc6aedecbd4..5286ab8d2953 100644
--- a/dev-packages/node-integration-tests/suites/express/without-tracing/test.ts
+++ b/dev-packages/node-integration-tests/suites/express/without-tracing/test.ts
@@ -54,7 +54,12 @@ describe('express without tracing', () => {
})
.start();
- runner.makeRequest('post', '/test-post', { data: { foo: 'bar', other: 1 } });
+ runner.makeRequest('post', '/test-post', {
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: JSON.stringify({ foo: 'bar', other: 1 }),
+ });
await runner.completed();
});
diff --git a/dev-packages/node-integration-tests/suites/tracing/meta-tags/test.ts b/dev-packages/node-integration-tests/suites/tracing/meta-tags/test.ts
index bd617f021778..c1b88699d8a0 100644
--- a/dev-packages/node-integration-tests/suites/tracing/meta-tags/test.ts
+++ b/dev-packages/node-integration-tests/suites/tracing/meta-tags/test.ts
@@ -12,15 +12,14 @@ describe('getTraceMetaTags', () => {
const runner = createRunner(__dirname, 'server.js').start();
- const response = await runner.makeRequest('get', '/test', {
+ const response = await runner.makeRequest<{ response: string }>('get', '/test', {
headers: {
'sentry-trace': `${traceId}-${parentSpanId}-1`,
baggage: 'sentry-environment=production,sentry-sample_rand=0.42',
},
});
- // @ts-ignore - response is defined, types just don't reflect it
- const html = response?.response as unknown as string;
+ const html = response?.response;
expect(html).toMatch(//);
expect(html).toContain('');
@@ -29,12 +28,11 @@ describe('getTraceMetaTags', () => {
test('injects tags with new trace if no incoming headers', async () => {
const runner = createRunner(__dirname, 'server.js').start();
- const response = await runner.makeRequest('get', '/test');
+ const response = await runner.makeRequest<{ response: string }>('get', '/test');
- // @ts-ignore - response is defined, types just don't reflect it
- const html = response?.response as unknown as string;
+ const html = response?.response;
- const traceId = html.match(//)?.[1];
+ const traceId = html?.match(//)?.[1];
expect(traceId).not.toBeUndefined();
expect(html).toContain(' {
test('injects tags with negative sampling decision if tracesSampleRate is 0', async () => {
const runner = createRunner(__dirname, 'server-tracesSampleRate-zero.js').start();
- const response = await runner.makeRequest('get', '/test');
+ const response = await runner.makeRequest<{ response: string }>('get', '/test');
- // @ts-ignore - response is defined, types just don't reflect it
- const html = response?.response as unknown as string;
+ const html = response?.response;
- const traceId = html.match(//)?.[1];
+ const traceId = html?.match(//)?.[1];
expect(traceId).not.toBeUndefined();
expect(html).toContain(' {
const runner = createRunner(__dirname, 'server-sdk-disabled.js').start();
- const response = await runner.makeRequest('get', '/test', {
+ const response = await runner.makeRequest<{ response: string }>('get', '/test', {
headers: {
'sentry-trace': `${traceId}-${parentSpanId}-1`,
baggage: 'sentry-environment=production',
},
});
- // @ts-ignore - response is defined, types just don't reflect it
- const html = response?.response as unknown as string;
+ const html = response?.response;
expect(html).not.toContain('"sentry-trace"');
expect(html).not.toContain('"baggage"');
diff --git a/dev-packages/node-integration-tests/utils/runner.ts b/dev-packages/node-integration-tests/utils/runner.ts
index fe01b5531bb6..e6062a6322b8 100644
--- a/dev-packages/node-integration-tests/utils/runner.ts
+++ b/dev-packages/node-integration-tests/utils/runner.ts
@@ -12,7 +12,6 @@ import type {
TransactionEvent,
} from '@sentry/core';
import { normalize } from '@sentry/core';
-import axios from 'axios';
import { execSync, spawn, spawnSync } from 'child_process';
import { existsSync, readFileSync, unlinkSync, writeFileSync } from 'fs';
import { join } from 'path';
@@ -161,7 +160,7 @@ type StartResult = {
makeRequest(
method: 'get' | 'post',
path: string,
- options?: { headers?: Record; data?: unknown; expectError?: boolean },
+ options?: { headers?: Record; data?: BodyInit; expectError?: boolean },
): Promise;
};
@@ -532,7 +531,7 @@ export function createRunner(...paths: string[]) {
makeRequest: async function (
method: 'get' | 'post',
path: string,
- options: { headers?: Record; data?: unknown; expectError?: boolean } = {},
+ options: { headers?: Record; data?: BodyInit; expectError?: boolean } = {},
): Promise {
try {
await waitFor(() => scenarioServerPort !== undefined, 10_000, 'Timed out waiting for server port');
@@ -542,22 +541,33 @@ export function createRunner(...paths: string[]) {
}
const url = `http://localhost:${scenarioServerPort}${path}`;
- const data = options.data;
+ const body = options.data;
const headers = options.headers || {};
const expectError = options.expectError || false;
- if (process.env.DEBUG) log('making request', method, url, headers, data);
+ if (process.env.DEBUG) log('making request', method, url, headers, body);
try {
- const res =
- method === 'post' ? await axios.post(url, data, { headers }) : await axios.get(url, { headers });
+ const res = await fetch(url, { headers, method, body });
+
+ if (!res.ok) {
+ if (!expectError) {
+ complete(new Error(`Expected request to "${path}" to succeed, but got a ${res.status} response`));
+ }
+
+ return;
+ }
if (expectError) {
complete(new Error(`Expected request to "${path}" to fail, but got a ${res.status} response`));
return;
}
- return res.data;
+ if (res.headers.get('content-type')?.includes('application/json')) {
+ return await res.json();
+ }
+
+ return (await res.text()) as T;
} catch (e) {
if (expectError) {
return;
diff --git a/yarn.lock b/yarn.lock
index 20454807390f..334e255ebb3b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10168,7 +10168,7 @@ aws-ssl-profiles@^1.1.1:
resolved "https://registry.yarnpkg.com/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz#157dd77e9f19b1d123678e93f120e6f193022641"
integrity sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==
-axios@1.8.2, axios@^1.0.0, axios@^1.7.7:
+axios@1.8.2, axios@^1.0.0:
version "1.8.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.2.tgz#fabe06e241dfe83071d4edfbcaa7b1c3a40f7979"
integrity sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==