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 dumpAssetmap: true, 39 dumpSourcemap: true, 40 maxWorkers: 2, 41 outputDir: 'foobar', 42 platforms: ['android'], 43 }); 44 }); 45 46 it(`parses default options`, async () => { 47 await expect(resolveOptionsAsync('/', {})).resolves.toEqual({ 48 clear: false, 49 dev: false, 50 dumpAssetmap: false, 51 dumpSourcemap: false, 52 maxWorkers: undefined, 53 outputDir: 'dist', 54 platforms: ['ios', 'android'], 55 }); 56 }); 57 it(`parses default options with web enabled`, async () => { 58 asMock(getConfig).mockReturnValueOnce({ 59 // @ts-expect-error 60 exp: { web: { bundler: 'metro' } }, 61 }); 62 await expect(resolveOptionsAsync('/', {})).resolves.toEqual( 63 expect.objectContaining({ 64 platforms: ['ios', 'android', 'web'], 65 }) 66 ); 67 }); 68}); 69