From 78738ec04a7353bb32016904c041c6eddeb83ce5 Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Mon, 5 Aug 2024 13:58:55 +0200 Subject: [PATCH 1/2] test(nuxt): Unit tests for event filter --- .../plugins/server.test.ts} | 0 .../test/{client => }/runtime/utils.test.ts | 2 +- packages/nuxt/test/server/sdk.test.ts | 42 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) rename packages/nuxt/test/{server/runtime/plugin.test.ts => runtime/plugins/server.test.ts} (100%) rename packages/nuxt/test/{client => }/runtime/utils.test.ts (97%) diff --git a/packages/nuxt/test/server/runtime/plugin.test.ts b/packages/nuxt/test/runtime/plugins/server.test.ts similarity index 100% rename from packages/nuxt/test/server/runtime/plugin.test.ts rename to packages/nuxt/test/runtime/plugins/server.test.ts diff --git a/packages/nuxt/test/client/runtime/utils.test.ts b/packages/nuxt/test/runtime/utils.test.ts similarity index 97% rename from packages/nuxt/test/client/runtime/utils.test.ts rename to packages/nuxt/test/runtime/utils.test.ts index b0b039d52e54..08c66193caa3 100644 --- a/packages/nuxt/test/client/runtime/utils.test.ts +++ b/packages/nuxt/test/runtime/utils.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { extractErrorContext } from '../../../src/runtime/utils'; +import { extractErrorContext } from '../../src/runtime/utils'; describe('extractErrorContext', () => { it('returns empty object for undefined or empty context', () => { diff --git a/packages/nuxt/test/server/sdk.test.ts b/packages/nuxt/test/server/sdk.test.ts index 8d84dc8b15c8..e0076f809a1c 100644 --- a/packages/nuxt/test/server/sdk.test.ts +++ b/packages/nuxt/test/server/sdk.test.ts @@ -1,4 +1,5 @@ import * as SentryNode from '@sentry/node'; +import type { NodeClient } from '@sentry/node'; import { SDK_VERSION } from '@sentry/node'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { init } from '../../src/server'; @@ -38,5 +39,46 @@ describe('Nuxt Server SDK', () => { it('returns client from init', () => { expect(init({})).not.toBeUndefined(); }); + + it('filters out low quality transactions', async () => { + const beforeSendEvent = vi.fn(event => event); + const client = init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + }) as NodeClient; + client.on('beforeSendEvent', beforeSendEvent); + + client.captureEvent({ type: 'transaction', transaction: 'GET /' }); + client.captureEvent({ type: 'transaction', transaction: 'GET _nuxt/some_asset.js' }); + client.captureEvent({ type: 'transaction', transaction: 'GET /_nuxt/some_asset.js' }); + client.captureEvent({ type: 'transaction', transaction: 'POST /_server' }); + + await client!.flush(); + + expect(beforeSendEvent).toHaveBeenCalledTimes(3); + expect(beforeSendEvent).toHaveBeenCalledWith( + expect.objectContaining({ + transaction: 'GET /', + }), + expect.any(Object), + ); + expect(beforeSendEvent).toHaveBeenCalledWith( + expect.objectContaining({ + transaction: 'GET _nuxt/some_asset.js', + }), + expect.any(Object), + ); + expect(beforeSendEvent).not.toHaveBeenCalledWith( + expect.objectContaining({ + transaction: 'GET /_nuxt/some_asset.js', + }), + expect.any(Object), + ); + expect(beforeSendEvent).toHaveBeenCalledWith( + expect.objectContaining({ + transaction: 'POST /_server', + }), + expect.any(Object), + ); + }); }); }); From 2d1c205b847ccfdc2b93e114bfba86997369523f Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Mon, 5 Aug 2024 17:42:02 +0200 Subject: [PATCH 2/2] add clarifying comment --- packages/nuxt/test/server/sdk.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/nuxt/test/server/sdk.test.ts b/packages/nuxt/test/server/sdk.test.ts index e0076f809a1c..20ec11c33512 100644 --- a/packages/nuxt/test/server/sdk.test.ts +++ b/packages/nuxt/test/server/sdk.test.ts @@ -48,8 +48,9 @@ describe('Nuxt Server SDK', () => { client.on('beforeSendEvent', beforeSendEvent); client.captureEvent({ type: 'transaction', transaction: 'GET /' }); - client.captureEvent({ type: 'transaction', transaction: 'GET _nuxt/some_asset.js' }); client.captureEvent({ type: 'transaction', transaction: 'GET /_nuxt/some_asset.js' }); + // Although this has the name of the build asset directory (_nuxt), it should not be filtered out as it would not match the regex + client.captureEvent({ type: 'transaction', transaction: 'GET _nuxt/some_asset.js' }); client.captureEvent({ type: 'transaction', transaction: 'POST /_server' }); await client!.flush();