Skip to content

Commit 7376508

Browse files
authored
test(replay): Update replay tests to handle side effects explicitly (#16135)
Extracted out of #16134 During that refactor, a bunch of stuff failed. The reason for this is that we relied on a side-effect mock in `use-fake-timers` utility, which is really not ideal at all. So this refactors this to instead make this explicit, as a side-effect import on the top of the test files. Then we can just use `vi.useFakeTimers()` normally.
1 parent 356a157 commit 7376508

31 files changed

+190
-192
lines changed

packages/replay-internal/test/integration/autoSaveSession.test.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,13 @@
22
* @vitest-environment jsdom
33
*/
44

5-
import { afterEach, describe, expect, test, vi } from 'vitest';
6-
5+
import '../utils/mock-internal-setTimeout';
76
import { EventType } from '@sentry-internal/rrweb';
8-
7+
import { afterEach, beforeAll, describe, expect, test, vi } from 'vitest';
98
import { saveSession } from '../../src/session/saveSession';
109
import type { RecordingEvent } from '../../src/types';
1110
import { addEvent } from '../../src/util/addEvent';
1211
import { resetSdkMock } from '../mocks/resetSdkMock';
13-
import { useFakeTimers } from '../utils/use-fake-timers';
14-
15-
useFakeTimers();
1612

1713
vi.mock('../../src/session/saveSession', () => {
1814
return {
@@ -21,6 +17,9 @@ vi.mock('../../src/session/saveSession', () => {
2117
});
2218

2319
describe('Integration | autoSaveSession', () => {
20+
beforeAll(() => {
21+
vi.useFakeTimers();
22+
});
2423
afterEach(() => {
2524
vi.clearAllMocks();
2625
});

packages/replay-internal/test/integration/beforeAddRecordingEvent.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* @vitest-environment jsdom
33
*/
44

5+
import '../utils/mock-internal-setTimeout';
56
import type { MockInstance, MockedFunction } from 'vitest';
67
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
78

@@ -17,9 +18,6 @@ import { createPerformanceSpans } from '../../src/util/createPerformanceSpans';
1718
import * as SendReplayRequest from '../../src/util/sendReplayRequest';
1819
import { BASE_TIMESTAMP, mockRrweb, mockSdk } from '../index';
1920
import type { DomHandler } from '../types';
20-
import { useFakeTimers } from '../utils/use-fake-timers';
21-
22-
useFakeTimers();
2321

2422
type MockTransportSend = MockedFunction<Transport['send']>;
2523

@@ -32,6 +30,7 @@ describe('Integration | beforeAddRecordingEvent', () => {
3230
const { record: mockRecord } = mockRrweb();
3331

3432
beforeAll(async () => {
33+
vi.useFakeTimers();
3534
vi.setSystemTime(new Date(BASE_TIMESTAMP));
3635
vi.spyOn(SentryBrowserUtils, 'addClickKeypressInstrumentationHandler').mockImplementation(handler => {
3736
domHandler = handler;

packages/replay-internal/test/integration/coreHandlers/handleAfterSendEvent.test.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22
* @vitest-environment jsdom
33
*/
44

5-
import type { MockInstance } from 'vitest';
6-
import { afterEach, describe, expect, it, vi } from 'vitest';
7-
8-
import { useFakeTimers } from '../../utils/use-fake-timers';
9-
10-
useFakeTimers();
11-
12-
import { getClient } from '@sentry/core';
5+
import '../../utils/mock-internal-setTimeout';
136
import type { ErrorEvent, Event } from '@sentry/core';
14-
7+
import { getClient } from '@sentry/core';
8+
import type { MockInstance } from 'vitest';
9+
import { afterEach, beforeAll, describe, expect, it, vi } from 'vitest';
1510
import { UNABLE_TO_SEND_REPLAY } from '../../../src/constants';
1611
import { handleAfterSendEvent } from '../../../src/coreHandlers/handleAfterSendEvent';
1712
import type { ReplayContainer } from '../../../src/replay';
@@ -22,6 +17,10 @@ import { resetSdkMock } from '../../mocks/resetSdkMock';
2217
let replay: ReplayContainer;
2318

2419
describe('Integration | coreHandlers | handleAfterSendEvent', () => {
20+
beforeAll(() => {
21+
vi.useFakeTimers();
22+
});
23+
2524
afterEach(() => {
2625
replay.stop();
2726
});

packages/replay-internal/test/integration/coreHandlers/handleBeforeSendEvent.test.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22
* @vitest-environment jsdom
33
*/
44

5-
import { afterEach, describe, expect, it, vi } from 'vitest';
6-
5+
import '../../utils/mock-internal-setTimeout';
6+
import { afterEach, beforeAll, describe, expect, it, vi } from 'vitest';
77
import { handleBeforeSendEvent } from '../../../src/coreHandlers/handleBeforeSendEvent';
88
import type { ReplayContainer } from '../../../src/replay';
99
import { Error } from '../../fixtures/error';
1010
import { resetSdkMock } from '../../mocks/resetSdkMock';
11-
import { useFakeTimers } from '../../utils/use-fake-timers';
1211

13-
useFakeTimers();
1412
let replay: ReplayContainer;
1513

1614
describe('Integration | coreHandlers | handleBeforeSendEvent', () => {
15+
beforeAll(() => {
16+
vi.useFakeTimers();
17+
});
18+
1719
afterEach(() => {
1820
replay.stop();
1921
});

packages/replay-internal/test/integration/coreHandlers/handleGlobalEvent.test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
* @vitest-environment jsdom
33
*/
44

5-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
6-
7-
import { getClient } from '@sentry/core';
5+
import '../../utils/mock-internal-setTimeout';
86
import type { Event } from '@sentry/core';
9-
7+
import { getClient } from '@sentry/core';
8+
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
109
import { REPLAY_EVENT_NAME, SESSION_IDLE_EXPIRE_DURATION } from '../../../src/constants';
1110
import { handleGlobalEventListener } from '../../../src/coreHandlers/handleGlobalEvent';
1211
import type { ReplayContainer } from '../../../src/replay';
@@ -15,12 +14,14 @@ import * as resetReplayIdOnDynamicSamplingContextModule from '../../../src/util/
1514
import { Error } from '../../fixtures/error';
1615
import { Transaction } from '../../fixtures/transaction';
1716
import { resetSdkMock } from '../../mocks/resetSdkMock';
18-
import { useFakeTimers } from '../../utils/use-fake-timers';
1917

20-
useFakeTimers();
2118
let replay: ReplayContainer;
2219

2320
describe('Integration | coreHandlers | handleGlobalEvent', () => {
21+
beforeAll(() => {
22+
vi.useFakeTimers();
23+
});
24+
2425
beforeEach(async () => {
2526
({ replay } = await resetSdkMock({
2627
replayOptions: {

packages/replay-internal/test/integration/earlyEvents.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
/**
22
* @vitest-environment jsdom
33
*/
4-
5-
import { beforeEach, describe, expect, it, vi } from 'vitest';
6-
4+
import '../utils/mock-internal-setTimeout';
5+
import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
76
import { BASE_TIMESTAMP } from '..';
87
import { resetSdkMock } from '../mocks/resetSdkMock';
9-
import { useFakeTimers } from '../utils/use-fake-timers';
10-
11-
useFakeTimers();
128

139
describe('Integration | early events', () => {
10+
beforeAll(() => {
11+
vi.useFakeTimers();
12+
});
13+
1414
beforeEach(() => {
1515
vi.clearAllMocks();
1616
});

packages/replay-internal/test/integration/errorSampleRate.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
* @vitest-environment jsdom
33
*/
44

5-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
6-
5+
import '../utils/mock-internal-setTimeout';
76
import { captureException, getClient } from '@sentry/core';
8-
7+
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
98
import {
109
BUFFER_CHECKOUT_TIME,
1110
DEFAULT_FLUSH_MIN_DELAY,
@@ -24,9 +23,6 @@ import { BASE_TIMESTAMP } from '../index';
2423
import { resetSdkMock } from '../mocks/resetSdkMock';
2524
import type { DomHandler } from '../types';
2625
import { getTestEventCheckout, getTestEventIncremental } from '../utils/getTestEvent';
27-
import { useFakeTimers } from '../utils/use-fake-timers';
28-
29-
useFakeTimers();
3026

3127
async function advanceTimers(time: number) {
3228
vi.advanceTimersByTime(time);
@@ -43,6 +39,10 @@ describe('Integration | errorSampleRate', () => {
4339
let mockRecord: RecordMock;
4440
let domHandler: DomHandler;
4541

42+
beforeAll(() => {
43+
vi.useFakeTimers();
44+
});
45+
4646
beforeEach(async () => {
4747
({ mockRecord, domHandler, replay } = await resetSdkMock({
4848
replayOptions: {

packages/replay-internal/test/integration/eventBuffer.test.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,24 @@
22
* @vitest-environment jsdom
33
*/
44

5-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
6-
5+
import '../utils/mock-internal-setTimeout';
6+
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
77
import { WINDOW } from '../../src/constants';
88
import type { Replay } from '../../src/integration';
99
import type { ReplayContainer } from '../../src/replay';
1010
import { addEvent } from '../../src/util/addEvent';
11-
12-
// mock functions need to be imported first
1311
import { BASE_TIMESTAMP, mockSdk } from '../index';
1412
import { getTestEventCheckout, getTestEventIncremental } from '../utils/getTestEvent';
15-
import { useFakeTimers } from '../utils/use-fake-timers';
16-
17-
useFakeTimers();
1813

1914
describe('Integration | eventBuffer | Event Buffer Max Size', () => {
2015
let replay: ReplayContainer;
2116
let integration: Replay;
2217
const prevLocation = WINDOW.location;
2318

19+
beforeAll(() => {
20+
vi.useFakeTimers();
21+
});
22+
2423
beforeEach(async () => {
2524
vi.setSystemTime(new Date(BASE_TIMESTAMP));
2625

packages/replay-internal/test/integration/eventProcessors.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
* @vitest-environment jsdom
33
*/
44

5-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
6-
7-
import { getClient, getCurrentScope } from '@sentry/core';
5+
import '../utils/mock-internal-setTimeout';
86
import type { Event } from '@sentry/core';
9-
7+
import { getClient, getCurrentScope } from '@sentry/core';
8+
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
109
import { BASE_TIMESTAMP } from '..';
1110
import { resetSdkMock } from '../mocks/resetSdkMock';
1211
import { getTestEventIncremental } from '../utils/getTestEvent';
13-
import { useFakeTimers } from '../utils/use-fake-timers';
14-
15-
useFakeTimers();
1612

1713
describe('Integration | eventProcessors', () => {
14+
beforeAll(() => {
15+
vi.useFakeTimers();
16+
});
17+
1818
beforeEach(() => {
1919
getCurrentScope().clear();
2020
getCurrentScope().setClient(undefined);

packages/replay-internal/test/integration/events.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
* @vitest-environment jsdom
33
*/
44

5+
import '../utils/mock-internal-setTimeout';
6+
import { getClient } from '@sentry/core';
57
import type { MockInstance } from 'vitest';
68
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
79

@@ -16,9 +18,6 @@ import type { RecordMock } from '../index';
1618
import { BASE_TIMESTAMP } from '../index';
1719
import { resetSdkMock } from '../mocks/resetSdkMock';
1820
import { getTestEventCheckout } from '../utils/getTestEvent';
19-
import { useFakeTimers } from '../utils/use-fake-timers';
20-
21-
useFakeTimers();
2221

2322
async function advanceTimers(time: number) {
2423
vi.advanceTimersByTime(time);
@@ -32,8 +31,9 @@ describe('Integration | events', () => {
3231
const prevLocation = WINDOW.location;
3332

3433
beforeAll(async () => {
34+
vi.useFakeTimers();
3535
vi.setSystemTime(new Date(BASE_TIMESTAMP));
36-
vi.runAllTimers();
36+
vi.runAllTimers(); // TODO???
3737
});
3838

3939
beforeEach(async () => {

packages/replay-internal/test/integration/flush.test.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@
22
* @vitest-environment jsdom
33
*/
44

5+
import '../utils/mock-internal-setTimeout';
56
import type { MockedFunction } from 'vitest';
67
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
78

8-
import { useFakeTimers } from '../utils/use-fake-timers';
9-
10-
useFakeTimers();
11-
129
import * as SentryBrowserUtils from '@sentry-internal/browser-utils';
1310
import * as SentryUtils from '@sentry/core';
1411

@@ -48,6 +45,7 @@ describe('Integration | flush', () => {
4845
let mockAddPerformanceEntries: MockAddPerformanceEntries;
4946

5047
beforeAll(async () => {
48+
vi.useFakeTimers();
5149
vi.spyOn(SentryBrowserUtils, 'addClickKeypressInstrumentationHandler').mockImplementation(handler => {
5250
domHandler = handler;
5351
});

packages/replay-internal/test/integration/getReplayId.test.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
* @vitest-environment jsdom
33
*/
44

5-
import { afterEach, describe, expect, it, vi } from 'vitest';
6-
5+
import '../utils/mock-internal-setTimeout';
6+
import { afterEach, beforeAll, describe, expect, it, vi } from 'vitest';
77
import { mockSdk } from '../mocks/mockSdk';
8-
import { useFakeTimers } from '../utils/use-fake-timers';
9-
10-
useFakeTimers();
118

129
describe('Integration | getReplayId', () => {
10+
beforeAll(() => {
11+
vi.useFakeTimers();
12+
});
13+
1314
afterEach(() => {
1415
vi.clearAllMocks();
1516
});

packages/replay-internal/test/integration/rateLimiting.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@
22
* @vitest-environment jsdom
33
*/
44

5-
import type { MockedFunction } from 'vitest';
6-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
7-
8-
import { getClient } from '@sentry/core';
5+
import '../utils/mock-internal-setTimeout';
96
import type { Transport, TransportMakeRequestResponse } from '@sentry/core';
10-
7+
import { getClient } from '@sentry/core';
8+
import type { MockedFunction } from 'vitest';
9+
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
1110
import { DEFAULT_FLUSH_MIN_DELAY } from '../../src/constants';
1211
import type { ReplayContainer } from '../../src/replay';
1312
import { clearSession } from '../../src/session/clearSession';
1413
import { BASE_TIMESTAMP, mockSdk } from '../index';
15-
import { useFakeTimers } from '../utils/use-fake-timers';
16-
17-
useFakeTimers();
1814

1915
async function advanceTimers(time: number) {
2016
vi.advanceTimersByTime(time);
@@ -27,6 +23,10 @@ describe('Integration | rate-limiting behaviour', () => {
2723
let replay: ReplayContainer;
2824
let mockTransportSend: MockTransportSend;
2925

26+
beforeAll(() => {
27+
vi.useFakeTimers();
28+
});
29+
3030
beforeEach(async () => {
3131
vi.setSystemTime(new Date(BASE_TIMESTAMP));
3232

packages/replay-internal/test/integration/recordingMode.test.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
* @vitest-environment jsdom
33
*/
44

5-
import { describe, expect, test } from 'vitest';
5+
import '../utils/mock-internal-setTimeout';
6+
import { beforeAll, describe, expect, test, vi } from 'vitest';
67
import { resetSdkMock } from '../mocks/resetSdkMock';
7-
import { useFakeTimers } from '../utils/use-fake-timers';
8-
9-
useFakeTimers();
108

119
describe('Integration | getRecordingMode()', () => {
10+
beforeAll(() => {
11+
vi.useFakeTimers();
12+
});
13+
1214
test('returns "session" when session sampling is enabled', async () => {
1315
const { integration } = await resetSdkMock({
1416
replayOptions: {

0 commit comments

Comments
 (0)