184 lines
5.4 KiB
TypeScript
184 lines
5.4 KiB
TypeScript
import { Tree, readJson, readProjectConfiguration } from '@nrwl/devkit';
|
|
import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing';
|
|
import { executorGenerator } from './executor';
|
|
import { pluginGenerator } from '../plugin/plugin';
|
|
import { libraryGenerator } from '@nrwl/js';
|
|
|
|
describe('NxPlugin Executor Generator', () => {
|
|
let tree: Tree;
|
|
let projectName: string;
|
|
|
|
beforeEach(async () => {
|
|
projectName = 'my-plugin';
|
|
tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
|
|
await pluginGenerator(tree, {
|
|
name: projectName,
|
|
} as any);
|
|
});
|
|
|
|
it('should generate files', async () => {
|
|
await executorGenerator(tree, {
|
|
project: projectName,
|
|
name: 'my-executor',
|
|
unitTestRunner: 'jest',
|
|
includeHasher: false,
|
|
});
|
|
|
|
expect(
|
|
tree.exists('libs/my-plugin/src/executors/my-executor/schema.d.ts')
|
|
).toBeTruthy();
|
|
expect(
|
|
tree.exists('libs/my-plugin/src/executors/my-executor/schema.json')
|
|
).toBeTruthy();
|
|
expect(
|
|
tree.exists('libs/my-plugin/src/executors/my-executor/executor.ts')
|
|
).toBeTruthy();
|
|
expect(
|
|
tree.exists('libs/my-plugin/src/executors/my-executor/executor.spec.ts')
|
|
).toBeTruthy();
|
|
});
|
|
|
|
it('should update executors.json', async () => {
|
|
await executorGenerator(tree, {
|
|
project: projectName,
|
|
name: 'my-executor',
|
|
description: 'my-executor description',
|
|
unitTestRunner: 'jest',
|
|
includeHasher: false,
|
|
});
|
|
|
|
const executorJson = readJson(tree, 'libs/my-plugin/executors.json');
|
|
|
|
expect(executorJson.executors['my-executor'].implementation).toEqual(
|
|
'./src/executors/my-executor/executor'
|
|
);
|
|
expect(executorJson.executors['my-executor'].schema).toEqual(
|
|
'./src/executors/my-executor/schema.json'
|
|
);
|
|
expect(executorJson.executors['my-executor'].description).toEqual(
|
|
'my-executor description'
|
|
);
|
|
});
|
|
|
|
it('should generate default description', async () => {
|
|
await executorGenerator(tree, {
|
|
project: projectName,
|
|
name: 'my-executor',
|
|
unitTestRunner: 'jest',
|
|
includeHasher: false,
|
|
});
|
|
|
|
const executorsJson = readJson(tree, 'libs/my-plugin/executors.json');
|
|
|
|
expect(executorsJson.executors['my-executor'].description).toEqual(
|
|
'my-executor executor'
|
|
);
|
|
});
|
|
|
|
it('should generate custom description', async () => {
|
|
await executorGenerator(tree, {
|
|
project: projectName,
|
|
name: 'my-executor',
|
|
description: 'my-executor custom description',
|
|
unitTestRunner: 'jest',
|
|
includeHasher: false,
|
|
});
|
|
|
|
const executorsJson = readJson(tree, 'libs/my-plugin/executors.json');
|
|
|
|
expect(executorsJson.executors['my-executor'].description).toEqual(
|
|
'my-executor custom description'
|
|
);
|
|
});
|
|
|
|
it('should create executors.json if it is not present', async () => {
|
|
await libraryGenerator(tree, {
|
|
name: 'test-js-lib',
|
|
buildable: true,
|
|
});
|
|
const libConfig = readProjectConfiguration(tree, 'test-js-lib');
|
|
await executorGenerator(tree, {
|
|
project: 'test-js-lib',
|
|
includeHasher: false,
|
|
name: 'test-executor',
|
|
unitTestRunner: 'jest',
|
|
});
|
|
|
|
expect(() => tree.exists(`${libConfig.root}/executors.json`)).not.toThrow();
|
|
expect(readJson(tree, `${libConfig.root}/package.json`).executors).toBe(
|
|
'executors.json'
|
|
);
|
|
});
|
|
|
|
describe('--unitTestRunner', () => {
|
|
describe('none', () => {
|
|
it('should not generate unit test files', async () => {
|
|
await executorGenerator(tree, {
|
|
project: projectName,
|
|
name: 'my-executor',
|
|
description: 'my-executor description',
|
|
unitTestRunner: 'none',
|
|
includeHasher: true,
|
|
});
|
|
|
|
expect(
|
|
tree.exists(
|
|
'libs/my-plugin/src/executors/my-executor/executor.spec.ts'
|
|
)
|
|
).toBeFalsy();
|
|
expect(
|
|
tree.exists('libs/my-plugin/src/executors/my-executor/hasher.spec.ts')
|
|
).toBeFalsy();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('--includeHasher', () => {
|
|
it('should generate hasher files', async () => {
|
|
await executorGenerator(tree, {
|
|
project: projectName,
|
|
name: 'my-executor',
|
|
includeHasher: true,
|
|
unitTestRunner: 'jest',
|
|
});
|
|
expect(
|
|
tree.exists('libs/my-plugin/src/executors/my-executor/hasher.spec.ts')
|
|
).toBeTruthy();
|
|
expect(
|
|
tree
|
|
.read('libs/my-plugin/src/executors/my-executor/hasher.ts')
|
|
.toString()
|
|
).toMatchInlineSnapshot(`
|
|
"import { CustomHasher } from '@nrwl/devkit';
|
|
|
|
/**
|
|
* This is a boilerplate custom hasher that matches
|
|
* the default Nx hasher. If you need to extend the behavior,
|
|
* you can consume workspace details from the context.
|
|
*/
|
|
export const myExecutorHasher: CustomHasher = async (task, context) => {
|
|
return context.hasher.hashTask(task)
|
|
};
|
|
|
|
export default myExecutorHasher;
|
|
"
|
|
`);
|
|
});
|
|
|
|
it('should update executors.json', async () => {
|
|
await executorGenerator(tree, {
|
|
project: projectName,
|
|
name: 'my-executor',
|
|
includeHasher: true,
|
|
unitTestRunner: 'jest',
|
|
});
|
|
|
|
const executorsJson = readJson(tree, 'libs/my-plugin/executors.json');
|
|
expect(executorsJson.executors['my-executor'].hasher).toEqual(
|
|
'./src/executors/my-executor/hasher'
|
|
);
|
|
});
|
|
});
|
|
});
|