import 'reflect-metadata'; jest.mock('mixpanel-browser/src/loader-module', () => { return { default: { init: jest.fn(), track: jest.fn(), }, }; }); import mixpanel from 'mixpanel-browser/src/loader-module'; import { DefaultTrackingService, } from './default-tracking.service'; import { GeneralBrandService, } from './../index'; import { BrandSettingsInterface, TrackingEventInterface, } from './../../../models/index'; const initDefaultTrackingService = ( generalBrandService?: GeneralBrandService, ) => { return new DefaultTrackingService( generalBrandService, ); }; describe('constructor', () => { // tslint:disable-next-line test('It calls mixpanel.init with the mixpanelToken from the brand settings', () => { const brandSettingsService = {} as GeneralBrandService; const brandSettings = { mixpanelToken: 'test', } as BrandSettingsInterface; brandSettingsService.getBrandSettings = jest.fn() .mockReturnValue(brandSettings); mixpanel.init = jest.fn(); const trackingService = initDefaultTrackingService( brandSettingsService, ); expect(mixpanel.init).toHaveBeenCalledWith( 'test', ); }); }); describe('sendEvent', () => { // tslint:disable-next-line test('It calls mixpanel.track with the correct arguments', () => { const brandSettingsService = {} as GeneralBrandService; const brandSettings = { mixpanelToken: 'test', } as BrandSettingsInterface; brandSettingsService.getBrandSettings = jest.fn() .mockReturnValue(brandSettings); const trackingService = initDefaultTrackingService( brandSettingsService, ); mixpanel.track = jest.fn(); const sentEvent = { name: 'testname', properties: { abc: 'testprop' }, } as TrackingEventInterface; trackingService.sendEvent(sentEvent); expect( mixpanel.track, ).toHaveBeenCalledWith( sentEvent.name, sentEvent.properties, ); }); });