1import { getConfig } from '@expo/config'; 2 3import { asMock } from '../../__tests__/asMock'; 4import { resolveOptionsAsync } from '../resolveOptions'; 5 6jest.mock('@expo/config', () => ({ 7 getConfig: jest.fn(() => ({ 8 pkg: {}, 9 exp: { 10 sdkVersion: '45.0.0', 11 name: 'my-app', 12 slug: 'my-app', 13 }, 14 })), 15})); 16 17describe(resolveOptionsAsync, () => { 18 it(`asserts invalid platform`, async () => { 19 await expect(resolveOptionsAsync('/', { '--platform': 'foobar' })).rejects.toThrow( 20 /^Unsupported platform "foobar"\./ 21 ); 22 }); 23 24 it(`parses qualified options`, async () => { 25 await expect( 26 resolveOptionsAsync('/', { 27 '--output-dir': 'foobar', 28 '--platform': 'android', 29 '--clear': true, 30 '--dev': true, 31 '--dump-assetmap': true, 32 '--dump-sourcemap': true, 33 '--max-workers': 2, 34 }) 35 ).resolves.toEqual({ 36 clear: true, 37 dev: true, 38 minify: true, 39 dumpAssetmap: true, 40 dumpSourcemap: true, 41 maxWorkers: 2, 42 outputDir: 'foobar', 43 platforms: ['android'], 44 }); 45 }); 46 47 it(`parses default options`, async () => { 48 await expect(resolveOptionsAsync('/', {})).resolves.toEqual({ 49 clear: false, 50 dev: false, 51 minify: true, 52 dumpAssetmap: false, 53 dumpSourcemap: false, 54 maxWorkers: undefined, 55 outputDir: 'dist', 56 platforms: ['ios', 'android'], 57 }); 58 }); 59 it(`parses default options with web enabled`, async () => { 60 asMock(getConfig).mockReturnValueOnce({ 61 // @ts-expect-error 62 exp: { web: { bundler: 'metro' } }, 63 }); 64 await expect(resolveOptionsAsync('/', {})).resolves.toEqual( 65 expect.objectContaining({ 66 platforms: ['ios', 'android', 'web'], 67 }) 68 ); 69 }); 70}); 71