diff --git a/src/providers/posthog.test.ts b/src/providers/posthog.test.ts new file mode 100644 index 0000000..d5131c2 --- /dev/null +++ b/src/providers/posthog.test.ts @@ -0,0 +1,57 @@ +import { posthog } from 'posthog-js'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +import { PostHogAnalyticsProvider } from './posthog'; + +vi.mock('posthog-js', () => ({ + posthog: { + init: vi.fn(), + }, +})); + +describe('PostHogAnalyticsProvider', () => { + const init = vi.mocked(posthog.init); + + beforeEach(() => { + init.mockClear(); + }); + + it('defaults pageview capture to history changes for SPA navigation', async () => { + const provider = new PostHogAnalyticsProvider( + { + enabled: true, + key: 'test-key', + }, + 'test', + ); + + await provider.initialize(); + + expect(init).toHaveBeenCalledWith( + 'test-key', + expect.objectContaining({ + capture_pageview: 'history_change', + }), + ); + }); + + it('keeps an explicit pageview capture override', async () => { + const provider = new PostHogAnalyticsProvider( + { + capture_pageview: false, + enabled: true, + key: 'test-key', + }, + 'test', + ); + + await provider.initialize(); + + expect(init).toHaveBeenCalledWith( + 'test-key', + expect.objectContaining({ + capture_pageview: false, + }), + ); + }); +}); diff --git a/src/providers/posthog.ts b/src/providers/posthog.ts index 92166ca..011d20b 100644 --- a/src/providers/posthog.ts +++ b/src/providers/posthog.ts @@ -33,6 +33,7 @@ export class PostHogAnalyticsProvider extends BaseAnalytics { const initConfig = { ...posthogConfig, // User's posthog-js config options api_host: host || posthogConfig.api_host || 'https://app.posthog.com', + capture_pageview: posthogConfig.capture_pageview ?? 'history_change', // Use before_send to dynamically add business context to all events before_send: this.createBeforeSendHandler(posthogConfig.before_send), debug: this.debug,