import { vol } from 'memfs'; import { loadTsConfigPathsAsync } from '../loadTsConfigPaths'; jest.mock('../evaluateTsConfig', () => ({ evaluateTsConfig: jest.fn((ts, filepath) => { return (require('@expo/json-file') as typeof import('@expo/json-file')).default.read(filepath, { json5: true, }); }), importTypeScriptFromProjectOptionally: jest.fn(() => ({})), })); describe(loadTsConfigPathsAsync, () => { beforeEach(() => { vol.reset(); }); it(`returns null if tsconfig doesn't exist`, async () => { vol.fromJSON({}, '/'); expect(await loadTsConfigPathsAsync('/')).toBeNull(); }); it(`returns just baseUrl`, async () => { vol.fromJSON( { 'jsconfig.json': '{}', }, '/' ); expect(await loadTsConfigPathsAsync('/')).toEqual({ baseUrl: '/', paths: undefined }); }); it(`returns jsconfig paths`, async () => { vol.fromJSON( { 'jsconfig.json': JSON.stringify({ compilerOptions: { baseUrl: 'src', paths: { '@foo/*': ['foo/*'], }, }, }), }, '/' ); expect(await loadTsConfigPathsAsync('/')).toEqual({ baseUrl: '/src', paths: { '@foo/*': ['foo/*'] }, }); }); it(`returns tsconfig before jsconfig`, async () => { vol.fromJSON( { 'tsconfig.json': JSON.stringify({ compilerOptions: { baseUrl: 'src', paths: { '@foo/*': ['foo/*'], }, }, }), 'jsconfig.json': JSON.stringify({}), }, '/' ); expect(await loadTsConfigPathsAsync('/')).toEqual({ baseUrl: '/src', paths: { '@foo/*': ['foo/*'] }, }); }); });