diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/app/app.vue b/dev-packages/e2e-tests/test-applications/nuxt-4/app/app.vue deleted file mode 100644 index 6550bbe08887..000000000000 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/app/app.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/app/pages/fetch-server-error.vue b/dev-packages/e2e-tests/test-applications/nuxt-4/app/pages/fetch-server-routes.vue similarity index 63% rename from dev-packages/e2e-tests/test-applications/nuxt-4/app/pages/fetch-server-error.vue rename to dev-packages/e2e-tests/test-applications/nuxt-4/app/pages/fetch-server-routes.vue index 0e9aeb34b4fc..089d77a2eee9 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/app/pages/fetch-server-error.vue +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/app/pages/fetch-server-routes.vue @@ -1,6 +1,7 @@ @@ -10,4 +11,8 @@ import { useFetch } from '#imports'; const fetchError = async () => { await useFetch('/api/server-error'); }; + +const fetchNitroFetch = async () => { + await useFetch('/api/nitro-fetch'); +}; diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/app/pages/index.vue b/dev-packages/e2e-tests/test-applications/nuxt-4/app/pages/index.vue index a3741b5111d0..57a583eb43b1 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/app/pages/index.vue +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/app/pages/index.vue @@ -1,3 +1,20 @@ + + diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/package.json b/dev-packages/e2e-tests/test-applications/nuxt-4/package.json index a68c4c823738..b16b7ee2b236 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/package.json +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/package.json @@ -18,7 +18,7 @@ "dependencies": { "@pinia/nuxt": "^0.5.5", "@sentry/nuxt": "latest || *", - "nuxt": "^4.0.0-alpha.4" + "nuxt": "^4.1.2" }, "devDependencies": { "@playwright/test": "~1.53.2", diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/server/api/nitro-fetch.ts b/dev-packages/e2e-tests/test-applications/nuxt-4/server/api/nitro-fetch.ts new file mode 100644 index 000000000000..6864ce6efafc --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/server/api/nitro-fetch.ts @@ -0,0 +1,5 @@ +import { defineEventHandler } from '#imports'; + +export default defineEventHandler(async () => { + return await $fetch('https://example.com'); +}); diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/errors.server.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/errors.server.test.ts index 62933f29dd48..e0873c1f496e 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/errors.server.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/errors.server.test.ts @@ -7,7 +7,7 @@ test.describe('server-side errors', async () => { return errorEvent?.exception?.values?.[0]?.value === 'Nuxt 4 Server error'; }); - await page.goto(`/fetch-server-error`); + await page.goto(`/fetch-server-routes`); await page.getByText('Fetch Server API Error', { exact: true }).click(); const error = await errorPromise; diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/tracing.server.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/tracing.server.test.ts index b6453b5a11cd..91ccc021ceda 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/tracing.server.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/tracing.server.test.ts @@ -1,5 +1,5 @@ import { expect, test } from '@playwright/test'; -import { waitForTransaction } from '@sentry-internal/test-utils'; +import { waitForError, waitForTransaction } from '@sentry-internal/test-utils'; import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; test('sends a server action transaction on pageload', async ({ page }) => { @@ -43,3 +43,21 @@ test('does not send transactions for build asset folder "_nuxt"', async ({ page expect(transactionEvent.transaction).toBe('GET /test-param/:param()'); }); + +test('captures server API calls made with Nitro $fetch', async ({ page }) => { + const transactionPromise = waitForTransaction('nuxt-4', async transactionEvent => { + return transactionEvent.transaction === 'GET /api/nitro-fetch'; + }); + + await page.goto(`/fetch-server-routes`); + await page.getByText('Fetch Nitro $fetch', { exact: true }).click(); + + const httpServerFetchSpan = await transactionPromise; + const httpClientSpan = httpServerFetchSpan.spans.find(span => span.description === 'GET https://example.com/'); + + expect(httpServerFetchSpan.transaction).toEqual('GET /api/nitro-fetch'); + expect(httpServerFetchSpan.contexts.trace.op).toEqual('http.server'); + + expect(httpClientSpan.parent_span_id).toEqual(httpServerFetchSpan.contexts.trace.span_id); + expect(httpClientSpan.op).toEqual('http.client'); +});