nx/e2e/workspace-create-npm/src/create-nx-workspace-npm.test.ts

259 lines
7.0 KiB
TypeScript

import {
checkFilesExist,
cleanupProject,
getSelectedPackageManager,
packageInstall,
readJson,
runCLI,
runCommand,
runCreateWorkspace,
uniq,
} from '@nx/e2e/utils';
describe('create-nx-workspace --preset=npm', () => {
const wsName = uniq('npm');
let orginalGlobCache;
beforeAll(() => {
orginalGlobCache = process.env.NX_PROJECT_GLOB_CACHE;
// glob cache is causing previous projects to show in Workspace for maxWorkers overrides
// which fails due to files no longer being available
process.env.NX_PROJECT_GLOB_CACHE = 'false';
runCreateWorkspace(wsName, {
preset: 'npm',
packageManager: getSelectedPackageManager(),
});
});
afterEach(() => {
// cleanup previous projects
runCommand(`rm -rf packages/** tsconfig.base.json`);
});
afterAll(() => {
process.env.NX_PROJECT_GLOB_CACHE = orginalGlobCache;
cleanupProject({ skipReset: true });
});
it('should setup package-based workspace', () => {
const packageJson = readJson('package.json');
expect(packageJson.dependencies).toEqual({});
if (getSelectedPackageManager() === 'pnpm') {
checkFilesExist('pnpm-workspace.yaml');
} else {
expect(packageJson.workspaces).toEqual(['packages/*']);
}
});
it('should add angular application', () => {
packageInstall('@nx/angular', wsName);
const appName = uniq('my-app');
expect(() => {
runCLI(`generate @nx/angular:app ${appName} --no-interactive`);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
}, 1_000_000);
it('should add angular library', () => {
packageInstall('@nx/angular', wsName);
const libName = uniq('lib');
expect(() => {
runCLI(
`generate @nx/angular:lib ${libName} --directory packages/${libName} --no-interactive`
);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
const tsconfig = readJson(`tsconfig.base.json`);
expect(tsconfig.compilerOptions.paths).toEqual({
[libName]: [`packages/${libName}/src/index.ts`],
});
}, 1_000_000);
it('should add js library', () => {
packageInstall('@nx/js', wsName);
const libName = uniq('lib');
expect(() =>
runCLI(
`generate @nx/js:library ${libName} --directory packages/${libName} --no-interactive`
)
).not.toThrowError();
checkFilesExist('tsconfig.base.json');
const tsconfig = readJson(`tsconfig.base.json`);
expect(tsconfig.compilerOptions.paths).toEqual({
[libName]: [`packages/${libName}/src/index.ts`],
});
});
it('should add web application', () => {
packageInstall('@nx/web', wsName);
const appName = uniq('my-app');
expect(() =>
runCLI(`generate @nx/web:app ${appName} --no-interactive`)
).not.toThrowError();
checkFilesExist('tsconfig.base.json');
});
it('should add react application', () => {
packageInstall('@nx/react', wsName);
const appName = uniq('my-app');
expect(() => {
runCLI(`generate @nx/react:app ${appName} --no-interactive`);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
});
it('should add react library', () => {
packageInstall('@nx/react', wsName);
const libName = uniq('lib');
expect(() => {
runCLI(
`generate @nx/react:lib ${libName} --directory packages/${libName} --no-interactive`
);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
const tsconfig = readJson(`tsconfig.base.json`);
expect(tsconfig.compilerOptions.paths).toEqual({
[libName]: [`packages/${libName}/src/index.ts`],
});
});
it('should add next application', () => {
packageInstall('@nx/next', wsName);
const appName = uniq('my-app');
expect(() => {
runCLI(`generate @nx/next:app ${appName} --no-interactive`);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
});
it('should add next library', () => {
packageInstall('@nx/next', wsName);
const libName = uniq('lib');
expect(() => {
runCLI(
`generate @nx/next:lib ${libName} --directory packages/${libName} --no-interactive`
);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
const tsconfig = readJson(`tsconfig.base.json`);
expect(tsconfig.compilerOptions.paths).toEqual({
[libName]: [`packages/${libName}/src/index.ts`],
[`${libName}/server`]: [`packages/${libName}/src/server.ts`],
});
});
it('should add react-native application', () => {
packageInstall('@nx/react-native', wsName);
const appName = uniq('my-app');
expect(() => {
runCLI(
`generate @nx/react-native:app ${appName} --install=false --no-interactive`
);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
});
it('should add react-native library', () => {
packageInstall('@nx/react-native', wsName);
const libName = uniq('lib');
expect(() => {
runCLI(
`generate @nx/react-native:lib ${libName} --directory packages/${libName} --no-interactive`
);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
const tsconfig = readJson(`tsconfig.base.json`);
expect(tsconfig.compilerOptions.paths).toEqual({
[libName]: [`packages/${libName}/src/index.ts`],
});
});
it('should add node application', () => {
packageInstall('@nx/node', wsName);
const appName = uniq('my-app');
expect(() => {
runCLI(`generate @nx/node:app ${appName} --no-interactive`);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
});
it('should add node library', () => {
packageInstall('@nx/node', wsName);
const libName = uniq('lib');
expect(() => {
runCLI(
`generate @nx/node:lib ${libName} --directory packages/${libName} --no-interactive`
);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
const tsconfig = readJson(`tsconfig.base.json`);
expect(tsconfig.compilerOptions.paths).toEqual({
[libName]: [`packages/${libName}/src/index.ts`],
});
});
it('should add nest application', () => {
packageInstall('@nx/nest', wsName);
const appName = uniq('my-app');
expect(() => {
runCLI(`generate @nx/nest:app ${appName} --no-interactive`);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
});
it('should add nest library', () => {
packageInstall('@nx/nest', wsName);
const libName = uniq('lib');
expect(() => {
runCLI(
`generate @nx/nest:lib ${libName} --directory packages/${libName} --no-interactive`
);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
const tsconfig = readJson(`tsconfig.base.json`);
expect(tsconfig.compilerOptions.paths).toEqual({
[libName]: [`packages/${libName}/src/index.ts`],
});
});
it('should add express application', () => {
packageInstall('@nx/express', wsName);
const appName = uniq('my-app');
expect(() => {
runCLI(`generate @nx/express:app ${appName} --no-interactive`);
}).not.toThrowError();
checkFilesExist('tsconfig.base.json');
});
});