UNPKG

expo-router

Version:

Expo Router is a file-based router for React Native and web applications.

92 lines (81 loc) • 3.23 kB
import withRouter from '../withRouter'; describe('apiRoutes', () => { it.each(['static', 'server'] as const)('accepts API routes with %s output', (output) => { const config = withRouter({ name: 'test', slug: 'test', web: { output } }, { apiRoutes: true }); expect(config.extra?.router.apiRoutes).toBe(true); }); it.each(['single', undefined] as const)('rejects the setting with %s output', (output) => { expect(() => withRouter({ name: 'test', slug: 'test', web: { output } }, { apiRoutes: true }) ).toThrow('The `apiRoutes` option requires `web.output` to be set to `static` or `server`.'); }); it.each(['static', 'server', 'single', undefined] as const)( 'preserves an explicit false value with %s output', (output) => { const config = withRouter( { name: 'test', slug: 'test', web: { output } }, { apiRoutes: false } ); expect(config.extra?.router.apiRoutes).toBe(false); } ); }); describe('asyncRoutes', () => { it('defaults to enabled only on web', () => { const config = withRouter({ name: 'test', slug: 'test' }); expect(config.extra?.router.asyncRoutes).toEqual({ web: true }); }); it('adds the web default to a partial platform configuration', () => { const config = withRouter( { name: 'test', slug: 'test' }, { asyncRoutes: { android: 'development' } } ); expect(config.extra?.router.asyncRoutes).toEqual({ android: 'development', web: true }); }); it.each([true, false, 'development', 'production'] as const)( 'preserves the scalar value %p', (asyncRoutes) => { const config = withRouter({ name: 'test', slug: 'test' }, { asyncRoutes }); expect(config.extra?.router.asyncRoutes).toBe(asyncRoutes); } ); it.each([ { default: false }, { default: 'development' as const }, { web: false }, { default: false, web: true }, ])('preserves an explicit web or default value: %p', (asyncRoutes) => { const config = withRouter({ name: 'test', slug: 'test' }, { asyncRoutes }); expect(config.extra?.router.asyncRoutes).toEqual(asyncRoutes); }); it('normalizes an existing router configuration', () => { const config = withRouter({ name: 'test', slug: 'test', extra: { router: { asyncRoutes: { ios: 'development' } } }, }); expect(config.extra?.router.asyncRoutes).toEqual({ ios: 'development', web: true }); }); it('preserves an explicit value from an existing router configuration', () => { const config = withRouter({ name: 'test', slug: 'test', extra: { router: { asyncRoutes: false } }, }); expect(config.extra?.router.asyncRoutes).toBe(false); }); it('lets plugin options override existing router settings while preserving other extra values', () => { const config = withRouter( { name: 'test', slug: 'test', extra: { custom: 'value', router: { asyncRoutes: false, origin: 'https://example.com' } }, }, { asyncRoutes: { ios: 'development' } } ); expect(config.extra).toEqual({ custom: 'value', router: { origin: 'https://example.com', asyncRoutes: { ios: 'development', web: true } }, }); }); });