From 5215171cc70328e5b17f22e084c4586ac3f5369d Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Wed, 11 Mar 2026 10:17:04 +0100 Subject: [PATCH 1/2] fix(core): Fix flaky metric sequence number test Mock `timestampInSeconds` to return a fixed value so the sequence counter does not reset due to millisecond boundary crossings between calls. Fixes https://github.com/getsentry/sentry-javascript/issues/19749 Co-Authored-By: Claude Opus 4.6 --- packages/core/test/lib/metrics/internal.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/core/test/lib/metrics/internal.test.ts b/packages/core/test/lib/metrics/internal.test.ts index a598f323067d..077d9a35975f 100644 --- a/packages/core/test/lib/metrics/internal.test.ts +++ b/packages/core/test/lib/metrics/internal.test.ts @@ -7,6 +7,7 @@ import { } from '../../../src/metrics/internal'; import type { Metric } from '../../../src/types-hoist/metric'; import * as loggerModule from '../../../src/utils/debug-logger'; +import * as timeModule from '../../../src/utils/time'; import { _INTERNAL_resetSequenceNumber } from '../../../src/utils/timestampSequence'; import { getDefaultTestClientOptions, TestClient } from '../../mocks/client'; @@ -1080,6 +1081,10 @@ describe('_INTERNAL_captureMetric', () => { describe('sentry.timestamp.sequence', () => { it('increments the sequence number across consecutive metrics', () => { + // Mock timestampInSeconds to return a fixed value so the sequence number + // does not reset due to millisecond boundary crossings between calls. + vi.spyOn(timeModule, 'timestampInSeconds').mockReturnValue(1234.567); + const options = getDefaultTestClientOptions({ dsn: PUBLIC_DSN }); const client = new TestClient(options); const scope = new Scope(); From 5f81bded5e584e1fc579138f47894845a7877c70 Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Wed, 11 Mar 2026 11:12:55 +0100 Subject: [PATCH 2/2] restore sp --- packages/core/test/lib/metrics/internal.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/test/lib/metrics/internal.test.ts b/packages/core/test/lib/metrics/internal.test.ts index 077d9a35975f..971a7a345883 100644 --- a/packages/core/test/lib/metrics/internal.test.ts +++ b/packages/core/test/lib/metrics/internal.test.ts @@ -1083,7 +1083,7 @@ describe('_INTERNAL_captureMetric', () => { it('increments the sequence number across consecutive metrics', () => { // Mock timestampInSeconds to return a fixed value so the sequence number // does not reset due to millisecond boundary crossings between calls. - vi.spyOn(timeModule, 'timestampInSeconds').mockReturnValue(1234.567); + const timestampSpy = vi.spyOn(timeModule, 'timestampInSeconds').mockReturnValue(1234.567); const options = getDefaultTestClientOptions({ dsn: PUBLIC_DSN }); const client = new TestClient(options); @@ -1098,6 +1098,8 @@ describe('_INTERNAL_captureMetric', () => { expect(buffer?.[0]?.attributes?.['sentry.timestamp.sequence']).toEqual({ value: 0, type: 'integer' }); expect(buffer?.[1]?.attributes?.['sentry.timestamp.sequence']).toEqual({ value: 1, type: 'integer' }); expect(buffer?.[2]?.attributes?.['sentry.timestamp.sequence']).toEqual({ value: 2, type: 'integer' }); + + timestampSpy.mockRestore(); }); it('resets the sequence number via _INTERNAL_resetSequenceNumber', () => {