import { createMpRouterAPI, createNavigatorFn, navigateToFn } from '../../src/mp/router'; import { createMpApp } from '../../src/mp/app'; describe('test src/mp/router.ts', () => { const initData = { appConfig: { id: 'app-fakewdid', staticResourceDomain: 'lowcode-9gu72kpiac8de2d6-1252394733.tcloudbaseapp.com', pages: [ { id: 'home', }, ], }, }; const navigationCtx: any = { __internal__: { getConfig: () => ({}) } }; it('test createMpRouterAPI.navigateBack page.length=1', () => { const app = createMpApp(initData); const res = createMpRouterAPI(app); jest.spyOn(global, 'getCurrentPages').mockImplementation(() => { return [ { page: 'home', }, ] as any; }); res.navigateBack({ delta: '1', }); expect(global.getCurrentPages).toBeCalled(); }); it('test createMpRouterAPI.navigateBack page.length>1', () => { const app = createMpApp(initData); const res = createMpRouterAPI(app); jest.spyOn(global, 'getCurrentPages').mockImplementation(() => { return [ { page: 'home', }, { page: 'my', }, ] as any; }); res.navigateBack({ delta: '2', }); expect(wx.navigateBack).toBeCalled(); }); it('test createMpRouterAPI.relaunchHome navigateBack', () => { const app = createMpApp(initData); const res = createMpRouterAPI(app); jest.spyOn(global, 'getCurrentPages').mockImplementation(() => { return [ { page: { id: 'home', }, route: '/pages/home/index', }, { page: { id: 'my', }, }, ] as any; }); res.relaunchHome(); expect(wx.navigateBack).toBeCalled(); }); it('test createMpRouterAPI.relaunchHome reLaunch', () => { const app = createMpApp(initData); const res = createMpRouterAPI(app); jest.spyOn(global, 'getCurrentPages').mockImplementation(() => { return [ { page: { id: 'home', }, route: '/dddd', }, { page: { id: 'my', }, }, ] as any; }); res.relaunchHome(); expect(wx.navigateBack).not.toBeCalled(); }); it('test createNavigatorFn mode=plugin', () => { const fn = createNavigatorFn(navigationCtx, 'navigateTo'); fn({ mode: 'plugin', pageId: 'home', }); expect(wx.navigateTo).toBeCalled(); }); it('test createNavigatorFn mode=web', () => { const fn = createNavigatorFn(navigationCtx, 'navigateTo'); fn({ packageName: '', params: {}, mode: 'web', pageId: 'home', events: {} as any, success: () => {}, fail: () => {}, complete: () => {}, }); expect(wx.navigateTo).not.toBeCalled(); }); it('test createNavigatorFn mode=other', () => { const fn = createNavigatorFn(navigationCtx, 'navigateTo'); fn({ packageName: '', params: {}, mode: 'mp', pageId: 'home', events: {} as any, success: () => {}, fail: () => {}, complete: () => {}, }); expect(wx.navigateTo).toBeCalled(); }); it('test createNavigatorFn url.protocol === weda-page', () => { const fn = createNavigatorFn(navigationCtx, 'navigateTo'); fn({ pageId: '', url: 'weda-page://main/index?tt=2323&uu65553=&ww=', }); expect(wx.navigateTo).toBeCalled(); }); it('test createNavigatorFn url.protocol === plugin', () => { const fn = createNavigatorFn(navigationCtx, 'navigateTo'); fn({ pageId: '', url: 'plugin://myPlugin/index', }); expect(wx.navigateTo).toBeCalled(); }); it('test createNavigatorFn url.protocol === miniprogram', () => { const fn = createNavigatorFn(navigationCtx, 'navigateTo'); fn({ pageId: '', url: 'miniprogram://wxda980ee3f800c1b0/pages/myPlugin/index', }); expect(wx.navigateToMiniProgram).toBeCalled(); }); it('test navigateToFn pages.length>=10', () => { jest.spyOn(global, 'getCurrentPages').mockImplementation(() => { return [ { page: { id: 'home1', }, }, { page: { id: 'home2', }, }, { page: { id: 'home3', }, }, { page: { id: 'home4', }, }, { page: { id: 'home5', }, }, { page: { id: 'home6', }, }, { page: { id: 'home7', }, }, { page: { id: 'home8', }, }, { page: { id: 'home9', }, }, { page: { id: 'home10', }, }, ] as any; }); navigateToFn('/pages/home/index', { events: jest.fn(), success: jest.fn(), fail: jest.fn, complete: jest.fn, options: {}, linkUri: {}, }); expect(wx.redirectTo).toBeCalled(); }); });