import { BehaviorReporter, BehaviorType } from '@tencent/merlin-behavior'; import { mockInjectJsapi, resetMockJsapi } from '../../../../../tests/shared'; import { Mmdata23865KvTransport } from '..'; import { MOCK_PAGE_ENTER_MMDATA_TRANSPORT_REPORT_ITEM, MOCK_PAGE_LEAVE_MMDATA_TRANSPORT_REPORT_ITEM, // MOCK_ELEMENT_EXPOSE_MMDATA_TRANSPORT_REPORT_ITEM, // MOCK_ELEMENT_CONCEAL_MMDATA_TRANSPORT_REPORT_ITEM, // MOCK_ELEMENT_CLICK_MMDATA_TRANSPORT_REPORT_ITEM, // MOCK_ELEMENT_HOVER_MMDATA_TRANSPORT_REPORT_ITEM, // MOCK_VIDEO_PLAY_START_MMDATA_TRANSPORT_REPORT_ITEM, // MOCK_VIDEO_PLAY_WAITING_MMDATA_TRANSPORT_REPORT_ITEM, // MOCK_VIDEO_PLAY_PAUSE_MMDATA_TRANSPORT_REPORT_ITEM, // MOCK_VIDEO_PLAY_FINISH_MMDATA_TRANSPORT_REPORT_ITEM, // MOCK_PAGE_ENTER_WITH_RED_DOT_ID_MMDATA_TRANSPORT_REPORT_ITEM, } from './utils'; describe('Mmdata23865KvTransport', () => { beforeEach(() => { resetMockJsapi(); jest.useFakeTimers(); }); afterEach(() => { jest.useRealTimers(); }); test('init resolves immediately if JSAPI is ready', () => { mockInjectJsapi(); const transport = new Mmdata23865KvTransport({ bizId: 233, }); const initPromise = transport.init(new BehaviorReporter()); return expect(initPromise).resolves.toBeUndefined(); }); test("init won't resolve until JSAPI ready", () => { const transport = new Mmdata23865KvTransport({ bizId: 233, }); const initPromise = transport.init(new BehaviorReporter()); // 如何测试处于 pending 状态的 promise? mockInjectJsapi(); return expect(initPromise).resolves.toBeUndefined(); }); it('send correctly', async () => { const MOCK_JSAPI = mockInjectJsapi(); const transport = new Mmdata23865KvTransport({ bizId: 233, }); await transport.init(new BehaviorReporter()); const invokeSpy = jest.spyOn(MOCK_JSAPI, 'invoke'); await transport.receiveFromReporter([MOCK_PAGE_ENTER_MMDATA_TRANSPORT_REPORT_ITEM]); expect(invokeSpy).toHaveBeenCalledWith('kvReport', { id: 23865, value: '233,Takanashi-6kka,2333,11460412800000,,0,Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML; like Gecko),{"username":"wxid_jiadeweixinhao"},,,Waifu,Home,286119822158157750966931017530273127202,209362020761111952321688425208572630776,,2,{"someNull":null;"someNumber":123;"falsyNumber":0;"someString":"someString";"falsyString":"";"someBoolean":true;"falsyBoolean":false;"someArray":[1;2;3];"emptyArray":[];"emptyObject":{};"someObject":{"someNull":null;"someNumber":123;"falsyNumber":0;"someString":"someString";"falsyString":"";"someBoolean":true;"falsyBoolean":false;"someArray":[1;2;3];"emptyArray":[];"emptyObject":{};"someObject":{"haha":"haha"}}},,{"someNull":null;"someNumber":123;"falsyNumber":0;"someString":"someString";"falsyString":"";"someBoolean":true;"falsyBoolean":false;"someArray":[1;2;3];"emptyArray":[];"emptyObject":{};"someObject":{"someNull":null;"someNumber":123;"falsyNumber":0;"someString":"someString";"falsyString":"";"someBoolean":true;"falsyBoolean":false;"someArray":[1;2;3];"emptyArray":[];"emptyObject":{};"someObject":{"haha":"haha"}}},pageEnter,{},{"screenHeight":1311;"screenWidth":2560;"clientHeight":848;"clientWidth":1759},{}', is_important: 1, is_report_now: 1, }); }); it('filter works', async () => { const MOCK_JSAPI = mockInjectJsapi(); const transport = new Mmdata23865KvTransport({ bizId: 233, filter: (item) => item.data.behaviorType !== BehaviorType.PAGE_LEAVE, }); await transport.init(new BehaviorReporter()); const invokeSpy = jest.spyOn(MOCK_JSAPI, 'invoke'); await transport.receiveFromReporter([MOCK_PAGE_LEAVE_MMDATA_TRANSPORT_REPORT_ITEM]); expect(invokeSpy).not.toHaveBeenCalled(); await transport.receiveFromReporter([ MOCK_PAGE_LEAVE_MMDATA_TRANSPORT_REPORT_ITEM, MOCK_PAGE_ENTER_MMDATA_TRANSPORT_REPORT_ITEM, MOCK_PAGE_LEAVE_MMDATA_TRANSPORT_REPORT_ITEM, ]); expect(invokeSpy).toHaveBeenCalledWith('kvReport', { id: 23865, value: '233,Takanashi-6kka,2333,11460412800000,,0,Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML; like Gecko),{"username":"wxid_jiadeweixinhao"},,,Waifu,Home,286119822158157750966931017530273127202,209362020761111952321688425208572630776,,2,{"someNull":null;"someNumber":123;"falsyNumber":0;"someString":"someString";"falsyString":"";"someBoolean":true;"falsyBoolean":false;"someArray":[1;2;3];"emptyArray":[];"emptyObject":{};"someObject":{"someNull":null;"someNumber":123;"falsyNumber":0;"someString":"someString";"falsyString":"";"someBoolean":true;"falsyBoolean":false;"someArray":[1;2;3];"emptyArray":[];"emptyObject":{};"someObject":{"haha":"haha"}}},,{"someNull":null;"someNumber":123;"falsyNumber":0;"someString":"someString";"falsyString":"";"someBoolean":true;"falsyBoolean":false;"someArray":[1;2;3];"emptyArray":[];"emptyObject":{};"someObject":{"someNull":null;"someNumber":123;"falsyNumber":0;"someString":"someString";"falsyString":"";"someBoolean":true;"falsyBoolean":false;"someArray":[1;2;3];"emptyArray":[];"emptyObject":{};"someObject":{"haha":"haha"}}},pageEnter,{},{"screenHeight":1311;"screenWidth":2560;"clientHeight":848;"clientWidth":1759},{}', is_important: 1, is_report_now: 1, }); }); });