import * as utils from '../../src/common/utils'; describe('test src/common/utils.ts', () => { afterEach(() => { jest.restoreAllMocks(); }); it('test getter', () => { const res = utils.getter({ name: 'hello' }, 'name'); expect(res).toBe('hello'); }); it('test setter', () => { const res = utils.setter({ name: 'hello' }, 'age', 23 as any); expect(res).toMatchObject({ age: 23, name: 'hello' }); }); it('test isMobile navigator.userAgent', () => { Object.defineProperty(navigator, 'userAgent', { value: 'android 1207', writable: true, }); const res = utils.isMobile(); expect(res).toBeTruthy(); }); it('test isMobile navigator.vendor', () => { // navigator.userAgent = ''; Object.defineProperty(navigator, 'userAgent', { value: undefined, writable: true, }); Object.defineProperty(navigator, 'vendor', { value: '1207', writable: true, }); const res = utils.isMobile(); expect(res).toBeTruthy(); }); it('test isMobile navigator.opera', () => { Object.defineProperty(navigator, 'userAgent', { value: undefined, writable: true, }); Object.defineProperty(navigator, 'vendor', { value: undefined, writable: true, }); Object.defineProperty(window, 'opera', { value: 'android 1207', writable: true, }); const res = utils.isMobile(); expect(res).toBeTruthy(); }); /** * @deprecated * 只根据ua判断,不再使用 matchMedia */ // it('test isMobile', () => { // Object.defineProperty(window, 'matchMedia', { // value: () => ({ // matches: 'xxx', // }), // }); // const res = utils.isMobile(); // expect(res).toBe('xxx'); // }); it('test urlJoinParams params=null', () => { const res = utils.urlJoinParams('http://qq.com', ''); expect(res).toBe('http://qq.com'); }); it('test urlJoinParams params!=null', () => { const res = utils.urlJoinParams('http://qq.com', { name: 'hello' }); expect(res).toBe('http://qq.com?name=hello'); }); it('test urlJoinParams params nest object', () => { const res = utils.urlJoinParams('http://qq.com', { level1: { level2: 'hello' } }); expect(res).toBe('http://qq.com?level1=%7B%22level2%22%3A%22hello%22%7D'); }); it('test urlJoinParams params=""', () => { const res = utils.urlJoinParams('http://qq.com', { level1: '' }); expect(res).toBe('http://qq.com?level1='); }); it('test normalizeRouterParams protocol=weda-page', () => { const url = 'weda-page://main/index?tt=2323'; const res = utils.normalizeRouterParams(url); expect(res.url).toBe(url); expect(res.protocol).toBe('weda-page'); expect(res.packageName).toBe(''); expect(res.pageId).toBe('index'); expect(res.params).toMatchObject({ tt: '2323' }); }); it('test normalizeRouterParams protocol=weda-page packageName=packageNameA', () => { const url = 'weda-page://packageNameA/index?tt=2323'; const res = utils.normalizeRouterParams(url); expect(res.url).toBe(url); expect(res.protocol).toBe('weda-page'); expect(res.packageName).toBe('packageNameA'); expect(res.pageId).toBe('index'); expect(res.params).toMatchObject({ tt: '2323' }); }); it('test normalizeRouterParams protocol=miniprogram', () => { const url = 'miniprogram://wx1574617e567497e1/pages/register_start/index?foo=bar'; const res = utils.normalizeRouterParams(url); expect(res.url).toBe(url); expect(res.protocol).toBe('miniprogram'); expect(res.appId).toBe('wx1574617e567497e1'); expect(res.path).toBe('pages/register_start/index'); expect(res.params).toMatchObject({ foo: 'bar' }); const miniprogramPath = utils.urlJoinParams(res.path, res.params); expect(miniprogramPath).toBe('pages/register_start/index?foo=bar'); }); it('test normalizeRouterParams protocol=plugin', () => { const url = 'plugin://myPlugin/index?foo=bar'; const res = utils.normalizeRouterParams(url); expect(res.url).toBe(url); expect(res.path).toBe('myPlugin/index'); expect(res.protocol).toBe('plugin'); expect(res.params).toMatchObject({ foo: 'bar' }); const pluginPath = utils.urlJoinParams(`plugin://${res?.path}`, res.params); expect(pluginPath).toBe(url); }); it('test normalizeRouterParams protocol=plugin query={ level1: { level2: "hello" }}', () => { const url = `plugin://myPlugin/hello-page?key={ level1: { level2: 'hello' }}`; const res = utils.normalizeRouterParams(url); expect(res.url).toBe(url); expect(res.path).toBe('myPlugin/hello-page'); expect(res.protocol).toBe('plugin'); expect(res.params).toMatchObject({ key: "{ level1: { level2: 'hello' }}" }); const pluginPath = utils.urlJoinParams(`plugin://${res?.path}`, res.params); expect(pluginPath).toBe(`plugin://myPlugin/hello-page?key=%7B%20level1%3A%20%7B%20level2%3A%20'hello'%20%7D%7D`); }); it('test createAppUtils getWXContext', async () => { const res = utils.createAppUtils({ __internal__: { activePage: 'home', getConfig: jest.fn(), resolveStaticResourceUrl: jest.fn(), isMobile: jest.fn(), }, } as any); const context = await res.getWXContext(); const result = Object.keys(res); expect(result).toContain('Now'); expect(JSON.stringify(context)).toBe('{}'); }); it('test createAppUtils currentPage', async () => { const res = utils.createAppUtils( { __internal__: { getConfig: jest.fn(), resolveStaticResourceUrl: jest.fn(), isMobile: jest.fn(), }, } as any, { currentPage: 'home' }, ); const currentPage = await res.getCurrentPage(); expect(currentPage).toBe('home'); }); it('test objectKeyFirstLowerToUpper', async () => { const params = { name: 'hello', '': '', }; const res = utils.objectKeyFirstLowerToUpper(params); expect(res).toMatchObject({ Name: params.name, '': '', }); }); it('test isSameArray array1=array2', async () => { const res = utils.isSameArray([1, 2], [1, 2]); expect(res).toBeTruthy(); }); it('test isSameArray array1!=array2', async () => { const res = utils.isSameArray([1, 2, 3], [1, 2]); expect(res).toBeFalsy(); }); it('test SDK', async () => { const config = { appId: 'xxx', mpAppId: 'xxx', openId: 'xxx', }; const res = new utils.SDK(config); const method = res.getAllMethods(); const instance = utils.SDK.getInstance(config); expect(res).toMatchObject({ config: config }); expect(Object.keys(method)).toContain('Now'); }); });