fix(tracker-web): telemetry test mock setup for process.env and document.addEventListener
This commit is contained in:
parent
faca108813
commit
0ee0533699
@ -5,6 +5,12 @@
|
|||||||
|
|
||||||
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
||||||
|
|
||||||
|
// Mock process.env BEFORE importing telemetry module (hoisted)
|
||||||
|
const mockProductId = vi.hoisted(() => 'test-product');
|
||||||
|
vi.stubGlobal('process', {
|
||||||
|
env: { NEXT_PUBLIC_PRODUCT_ID: mockProductId },
|
||||||
|
});
|
||||||
|
|
||||||
// Mock browser globals before importing the module
|
// Mock browser globals before importing the module
|
||||||
const mockSendBeacon = vi.fn().mockReturnValue(true);
|
const mockSendBeacon = vi.fn().mockReturnValue(true);
|
||||||
const mockFetch = vi.fn().mockResolvedValue({ ok: true });
|
const mockFetch = vi.fn().mockResolvedValue({ ok: true });
|
||||||
@ -23,7 +29,10 @@ vi.stubGlobal('localStorage', {
|
|||||||
removeItem: (key: string) => mockLocalStorage.delete(key),
|
removeItem: (key: string) => mockLocalStorage.delete(key),
|
||||||
});
|
});
|
||||||
|
|
||||||
vi.stubGlobal('document', { visibilityState: 'visible' });
|
vi.stubGlobal('document', {
|
||||||
|
visibilityState: 'visible',
|
||||||
|
addEventListener: mockAddEventListener,
|
||||||
|
});
|
||||||
vi.stubGlobal('window', {
|
vi.stubGlobal('window', {
|
||||||
addEventListener: mockAddEventListener,
|
addEventListener: mockAddEventListener,
|
||||||
});
|
});
|
||||||
@ -111,10 +120,7 @@ describe('flush', () => {
|
|||||||
trackEvent('info', 'test', 'test_event');
|
trackEvent('info', 'test', 'test_event');
|
||||||
flush();
|
flush();
|
||||||
|
|
||||||
expect(mockSendBeacon).toHaveBeenCalledWith(
|
expect(mockSendBeacon).toHaveBeenCalledWith('/api/telemetry/ingest', expect.any(String));
|
||||||
'/api/telemetry/ingest',
|
|
||||||
expect.any(String),
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('falls back to fetch when sendBeacon fails', () => {
|
it('falls back to fetch when sendBeacon fails', () => {
|
||||||
@ -124,7 +130,7 @@ describe('flush', () => {
|
|||||||
|
|
||||||
expect(mockFetch).toHaveBeenCalledWith(
|
expect(mockFetch).toHaveBeenCalledWith(
|
||||||
'/api/telemetry/ingest',
|
'/api/telemetry/ingest',
|
||||||
expect.objectContaining({ method: 'POST', keepalive: true }),
|
expect.objectContaining({ method: 'POST', keepalive: true })
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -153,10 +159,7 @@ describe('initTelemetry', () => {
|
|||||||
|
|
||||||
it('registers visibilitychange listener', () => {
|
it('registers visibilitychange listener', () => {
|
||||||
initTelemetry();
|
initTelemetry();
|
||||||
expect(mockAddEventListener).toHaveBeenCalledWith(
|
expect(mockAddEventListener).toHaveBeenCalledWith('visibilitychange', expect.any(Function));
|
||||||
'visibilitychange',
|
|
||||||
expect.any(Function),
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('tracks session_started event', () => {
|
it('tracks session_started event', () => {
|
||||||
@ -165,7 +168,7 @@ describe('initTelemetry', () => {
|
|||||||
|
|
||||||
const payload = JSON.parse(mockSendBeacon.mock.calls[0][1]);
|
const payload = JSON.parse(mockSendBeacon.mock.calls[0][1]);
|
||||||
const sessionEvent = payload.events.find(
|
const sessionEvent = payload.events.find(
|
||||||
(e: Record<string, string>) => e.eventName === 'session_started',
|
(e: Record<string, string>) => e.eventName === 'session_started'
|
||||||
);
|
);
|
||||||
expect(sessionEvent).toBeDefined();
|
expect(sessionEvent).toBeDefined();
|
||||||
expect(sessionEvent.module).toBe('app_lifecycle');
|
expect(sessionEvent.module).toBe('app_lifecycle');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user