nx/packages/react-native/src/utils/ensure-node-modules-symlink.spec.ts

109 lines
3.4 KiB
TypeScript

import { tmpdir } from 'os';
import { join } from 'path';
import * as fs from 'fs-extra';
import { ensureNodeModulesSymlink } from './ensure-node-modules-symlink';
const workspaceDir = join(tmpdir(), 'nx-react-native-test');
const appDir = 'apps/myapp';
const appDirAbsolutePath = join(workspaceDir, appDir);
describe('ensureNodeModulesSymlink', () => {
beforeEach(() => {
if (fs.existsSync(workspaceDir)) fs.removeSync(workspaceDir);
fs.mkdirSync(workspaceDir);
fs.mkdirSync(appDirAbsolutePath, { recursive: true });
fs.mkdirSync(appDirAbsolutePath, { recursive: true });
fs.writeFileSync(
join(appDirAbsolutePath, 'package.json'),
JSON.stringify({
name: 'myapp',
dependencies: { 'react-native': '*' },
})
);
fs.writeFileSync(
join(workspaceDir, 'package.json'),
JSON.stringify({
name: 'workspace',
dependencies: {
'@nx/react-native': '9999.9.9',
'@react-native-community/cli-platform-ios': '7777.7.7',
'@react-native-community/cli-platform-android': '7777.7.7',
'react-native': '0.9999.0',
},
})
);
});
afterEach(() => {
if (fs.existsSync(workspaceDir)) fs.removeSync(workspaceDir);
});
it('should create symlinks', () => {
createNpmDirectory('@nx/react-native', '9999.9.9');
createNpmDirectory(
'@react-native-community/cli-platform-android',
'7777.7.7'
);
createNpmDirectory('@react-native-community/cli-platform-ios', '7777.7.7');
createNpmDirectory('hermes-engine', '3333.3.3');
createNpmDirectory('react-native', '0.9999.0');
createNpmDirectory('jsc-android', '888888.0.0');
createNpmDirectory('@babel/runtime', '5555.0.0');
ensureNodeModulesSymlink(workspaceDir, appDir);
expectSymlinkToExist('@nx/react-native');
expectSymlinkToExist('react-native');
expectSymlinkToExist('jsc-android');
expectSymlinkToExist('hermes-engine');
expectSymlinkToExist('@react-native-community/cli-platform-ios');
expectSymlinkToExist('@react-native-community/cli-platform-android');
expectSymlinkToExist('@babel/runtime');
});
it('should add packages listed in workspace package.json', () => {
fs.writeFileSync(
join(workspaceDir, 'package.json'),
JSON.stringify({
name: 'workspace',
dependencies: {
random: '9999.9.9',
},
})
);
createNpmDirectory('@nx/react-native', '9999.9.9');
createNpmDirectory(
'@react-native-community/cli-platform-android',
'7777.7.7'
);
createNpmDirectory('@react-native-community/cli-platform-ios', '7777.7.7');
createNpmDirectory('hermes-engine', '3333.3.3');
createNpmDirectory('react-native', '0.9999.0');
createNpmDirectory('jsc-android', '888888.0.0');
createNpmDirectory('@babel/runtime', '5555.0.0');
createNpmDirectory('random', '9999.9.9');
ensureNodeModulesSymlink(workspaceDir, appDir);
expectSymlinkToExist('random');
});
function createNpmDirectory(packageName, version) {
const dir = join(workspaceDir, `node_modules/${packageName}`);
fs.mkdirSync(dir, { recursive: true });
fs.writeFileSync(
join(dir, 'package.json'),
JSON.stringify({ name: packageName, version: version })
);
return dir;
}
function expectSymlinkToExist(packageName) {
expect(
fs.existsSync(
join(appDirAbsolutePath, `node_modules/${packageName}/package.json`)
)
).toBe(true);
}
});