Files
nrwl--nx/packages/plugin/src/generators/create-package/create-package.spec.ts
T
2026-07-13 12:38:36 +08:00

148 lines
4.1 KiB
TypeScript

import 'nx/src/internal-testing-utils/mock-project-graph';
import {
joinPathFragments,
readJson,
readProjectConfiguration,
Tree,
} from '@nx/devkit';
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
import { PackageJson } from 'nx/src/utils/package-json';
import pluginGenerator from '../plugin/plugin';
import { createPackageGenerator } from './create-package';
import { CreatePackageSchema } from './schema';
import { setCwd } from '@nx/devkit/internal-testing-utils';
import { tsLibVersion } from '@nx/js/internal';
import { nxVersion } from 'nx/src/utils/versions';
const getSchema: (
overrides?: Partial<CreatePackageSchema>
) => CreatePackageSchema = (overrides = {}) => ({
name: 'create-a-workspace',
directory: 'packages/create-a-workspace',
project: 'my-plugin',
compiler: 'tsc',
skipTsConfig: false,
skipFormat: false,
skipLintChecks: false,
linter: 'eslint',
unitTestRunner: 'jest',
...overrides,
});
describe('NxPlugin Create Package Generator', () => {
let tree: Tree;
beforeEach(async () => {
tree = createTreeWithEmptyWorkspace();
setCwd('');
await pluginGenerator(tree, {
name: 'my-plugin',
directory: 'packages/my-plugin',
compiler: 'tsc',
skipTsConfig: false,
skipFormat: false,
skipLintChecks: false,
linter: 'eslint',
unitTestRunner: 'jest',
});
});
it('should update the project.json file', async () => {
await createPackageGenerator(tree, getSchema());
const project = readProjectConfiguration(tree, 'create-a-workspace');
expect(project.root).toEqual('packages/create-a-workspace');
expect(project.sourceRoot).toEqual('packages/create-a-workspace/bin');
expect(project.targets.build).toEqual({
executor: '@nx/js:tsc',
outputs: ['{options.outputPath}'],
options: {
outputPath: 'dist/packages/create-a-workspace',
tsConfig: 'packages/create-a-workspace/tsconfig.lib.json',
main: 'packages/create-a-workspace/bin/index.ts',
assets: ['packages/create-a-workspace/*.md'],
},
});
});
it('should place the create-package plugin in a directory', async () => {
await createPackageGenerator(
tree,
getSchema({
directory: 'clis/create-a-workspace',
} as Partial<CreatePackageSchema>)
);
const project = readProjectConfiguration(tree, 'create-a-workspace');
expect(project.root).toEqual('clis/create-a-workspace');
});
it('should create a preset generator in the plugin', async () => {
await createPackageGenerator(tree, getSchema());
expect(
tree.exists('packages/my-plugin/src/generators/preset/generator.ts')
).toBeTruthy();
});
it('should specify tsc as compiler', async () => {
await createPackageGenerator(
tree,
getSchema({
compiler: 'tsc',
})
);
const { build } = readProjectConfiguration(
tree,
'create-a-workspace'
).targets;
expect(build.executor).toEqual('@nx/js:tsc');
});
it('should specify swc as compiler', async () => {
await createPackageGenerator(
tree,
getSchema({
compiler: 'swc',
})
);
const { build } = readProjectConfiguration(
tree,
'create-a-workspace'
).targets;
expect(build.executor).toEqual('@nx/js:swc');
});
it("should use name as default for the package.json's name", async () => {
await createPackageGenerator(tree, getSchema());
const { root } = readProjectConfiguration(tree, 'create-a-workspace');
const { name } = readJson<PackageJson>(
tree,
joinPathFragments(root, 'package.json')
);
expect(name).toEqual('create-a-workspace');
});
it("should have valid default package.json's dependencies", async () => {
await createPackageGenerator(tree, getSchema());
const { root } = readProjectConfiguration(tree, 'create-a-workspace');
const { dependencies } = readJson<PackageJson>(
tree,
joinPathFragments(root, 'package.json')
);
expect(dependencies).toEqual(
expect.objectContaining({
'create-nx-workspace': nxVersion,
tslib: tsLibVersion,
})
);
});
});