1/* eslint-env jest */ 2import { ExecaError } from 'execa'; 3import fs from 'fs/promises'; 4 5import { execute, getLoadedModulesAsync, projectRoot } from './utils'; 6 7const originalForceColor = process.env.FORCE_COLOR; 8 9beforeAll(async () => { 10 await fs.mkdir(projectRoot, { recursive: true }); 11 process.env.FORCE_COLOR = '0'; 12}); 13afterAll(() => { 14 process.env.FORCE_COLOR = originalForceColor; 15}); 16 17it('loads expected modules by default', async () => { 18 const modules = await getLoadedModulesAsync(`require('../../build/src/logout');`); 19 expect(modules).toStrictEqual([ 20 '../node_modules/ansi-styles/index.js', 21 '../node_modules/arg/index.js', 22 '../node_modules/chalk/source/index.js', 23 '../node_modules/chalk/source/util.js', 24 '../node_modules/has-flag/index.js', 25 '../node_modules/supports-color/index.js', 26 '@expo/cli/build/src/log.js', 27 '@expo/cli/build/src/logout/index.js', 28 '@expo/cli/build/src/utils/args.js', 29 '@expo/cli/build/src/utils/errors.js', 30 ]); 31}); 32 33it('runs `npx expo logout --help`', async () => { 34 const results = await execute('logout', '--help'); 35 expect(results.stdout).toMatchInlineSnapshot(` 36 " 37 Info 38 Log out of an Expo account 39 40 Usage 41 $ npx expo logout 42 43 Options 44 -h, --help Usage info 45 " 46 `); 47}); 48 49it('throws on invalid project root', async () => { 50 expect.assertions(1); 51 try { 52 await execute('very---invalid', 'logout'); 53 } catch (e) { 54 const error = e as ExecaError; 55 expect(error.stderr).toMatch(/Invalid project root: \//); 56 } 57}); 58