import { Router } from '../router'; import { Routes, RouteDefinition } from '../routes'; import { BaseComponent } from '../../../components/base.component'; import { CustomElement } from '../../../decorators/customelement.decorator'; describe('router', () => { @CustomElement('mock-component') class MockComponent extends BaseComponent { constructor() { super(); } render() { return '
Test
'; } } let router: Router = null; const mockRoutes: RouteDefinition = { '/home': { component: MockComponent }, '/wrong': { component: null } }; beforeAll(() => { const outlet = document.createElement('div'); outlet.setAttribute('n-router-outlet', ''); document.body.appendChild(outlet); customElements.define('mock-component', MockComponent); }); beforeEach(() => { router = Router.getInstance(true); }); afterAll(() => { document.body.innerHTML = ''; }); it('register routes', () => { router.registerRouter(mockRoutes); expect(router).not.toBeNull(); const expectSetting = [ { "action": { "component": null }, "legacy": "/wrong", "map": [], "path": /^\/wrong$/ }, { "action": { "component": MockComponent }, "legacy": "/home", "map": [], "path": /^\/home$/ }]; expect(router['routes']).toEqual(expectSetting); }); it('navigates correct route', () => { router.registerRouter(mockRoutes); router.navigateRoute('/home'); const targetSet = document.querySelector('div[n-router-outlet]').innerHTML; expect(targetSet).toEqual('
Test
'); }); it('navigates wrong route', () => { router.registerRouter(mockRoutes); const error = () => { router.navigateRoute('/xxx'); }; expect(error).toThrowError('Route not found'); }); it('navigates route with no component', () => { router.registerRouter(mockRoutes); const error = () => { router.navigateRoute('/wrong'); }; expect(error).toThrowError('Route found but has no component and default route is not defined'); }); it('set outlet', () => { expect(router).not.toBeNull(); }); it('getRoute internal', () => { router.registerRouter(mockRoutes); const internalRoute = router['getRoute']('/home'); expect(internalRoute).toEqual({ "action": { "component": MockComponent }, "legacy": "/home", "map": [], "path": /^\/home$/ }); }); it('getRoute internal fail', () => { router.registerRouter(mockRoutes); const internalRoute = router['getRoute']('/notthere'); expect(internalRoute).toEqual(false); }); it('getDefaultRoute internal no default', () => { router.registerRouter(mockRoutes); const internalRoute = router['getDefaultRoute'](); expect(internalRoute).toEqual(false); }); });