feat(misc): export mock builder context from workspace (#2221)
This commit is contained in:
parent
6ef95bd454
commit
cee6888a12
@ -5,7 +5,10 @@ import {
|
|||||||
} from './execute.impl';
|
} from './execute.impl';
|
||||||
import { of, from } from 'rxjs';
|
import { of, from } from 'rxjs';
|
||||||
import * as devkitArchitect from '@angular-devkit/architect';
|
import * as devkitArchitect from '@angular-devkit/architect';
|
||||||
import { MockBuilderContext, getMockContext } from '../../utils/testing';
|
|
||||||
|
import { MockBuilderContext } from '@nrwl/workspace/testing';
|
||||||
|
|
||||||
|
import { getMockContext } from '../../utils/testing';
|
||||||
|
|
||||||
jest.mock('child_process');
|
jest.mock('child_process');
|
||||||
let { fork } = require('child_process');
|
let { fork } = require('child_process');
|
||||||
|
|||||||
@ -1,13 +1,12 @@
|
|||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
|
||||||
|
import { schema } from '@angular-devkit/core';
|
||||||
import { Rule, Tree } from '@angular-devkit/schematics';
|
import { Rule, Tree } from '@angular-devkit/schematics';
|
||||||
import {
|
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||||
TestingArchitectHost,
|
import { Architect } from '@angular-devkit/architect';
|
||||||
TestLogger
|
import { TestingArchitectHost } from '@angular-devkit/architect/testing';
|
||||||
} from '@angular-devkit/architect/testing';
|
|
||||||
import { schema, JsonObject } from '@angular-devkit/core';
|
import { MockBuilderContext } from '@nrwl/workspace/testing';
|
||||||
import { Architect, BuilderContext, Target } from '@angular-devkit/architect';
|
|
||||||
import { ScheduleOptions } from '@angular-devkit/architect/src/api';
|
|
||||||
|
|
||||||
const testRunner = new SchematicTestRunner(
|
const testRunner = new SchematicTestRunner(
|
||||||
'@nrwl/node',
|
'@nrwl/node',
|
||||||
@ -41,74 +40,3 @@ export async function getMockContext() {
|
|||||||
await context.addBuilderFromPackage(join(__dirname, '../..'));
|
await context.addBuilderFromPackage(join(__dirname, '../..'));
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MockBuilderContext implements BuilderContext {
|
|
||||||
id: 0;
|
|
||||||
|
|
||||||
builder: any = {};
|
|
||||||
analytics = null;
|
|
||||||
|
|
||||||
target: Target = {
|
|
||||||
project: null,
|
|
||||||
target: null
|
|
||||||
};
|
|
||||||
|
|
||||||
get currentDirectory() {
|
|
||||||
return this.architectHost.currentDirectory;
|
|
||||||
}
|
|
||||||
get workspaceRoot() {
|
|
||||||
return this.architectHost.workspaceRoot;
|
|
||||||
}
|
|
||||||
logger = new TestLogger('test');
|
|
||||||
constructor(
|
|
||||||
private architect: Architect,
|
|
||||||
private architectHost: TestingArchitectHost
|
|
||||||
) {}
|
|
||||||
|
|
||||||
async addBuilderFromPackage(path: string) {
|
|
||||||
return await this.architectHost.addBuilderFromPackage(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
async addTarget(target: Target, builderName: string) {
|
|
||||||
return await this.architectHost.addTarget(target, builderName);
|
|
||||||
}
|
|
||||||
|
|
||||||
getBuilderNameForTarget(target: Target) {
|
|
||||||
return this.architectHost.getBuilderNameForTarget(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
scheduleTarget(
|
|
||||||
target: Target,
|
|
||||||
overrides?: JsonObject,
|
|
||||||
scheduleOptions?: ScheduleOptions
|
|
||||||
) {
|
|
||||||
return this.architect.scheduleTarget(target, overrides, scheduleOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
scheduleBuilder(
|
|
||||||
name: string,
|
|
||||||
overrides?: JsonObject,
|
|
||||||
scheduleOptions?: ScheduleOptions
|
|
||||||
) {
|
|
||||||
return this.architect.scheduleBuilder(name, overrides, scheduleOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
getTargetOptions(target: Target) {
|
|
||||||
return this.architectHost.getOptionsForTarget(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
validateOptions<T extends JsonObject = JsonObject>(
|
|
||||||
options: JsonObject,
|
|
||||||
builderName: string
|
|
||||||
): Promise<T> {
|
|
||||||
return Promise.resolve<T>(options as T);
|
|
||||||
}
|
|
||||||
|
|
||||||
reportRunning() {}
|
|
||||||
|
|
||||||
reportStatus(status: string) {}
|
|
||||||
|
|
||||||
reportProgress(current: number, total?: number, status?: string) {}
|
|
||||||
|
|
||||||
addTeardown(teardown: () => Promise<void> | void) {}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,8 +1,12 @@
|
|||||||
import { run as storybookBuilder } from './build-storybook.impl';
|
|
||||||
import { MockBuilderContext, getMockContext } from '../../utils/testing';
|
|
||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
|
|
||||||
import * as storybook from '@storybook/core/dist/server/build-static';
|
import * as storybook from '@storybook/core/dist/server/build-static';
|
||||||
|
|
||||||
|
import { MockBuilderContext } from '@nrwl/workspace/testing';
|
||||||
|
|
||||||
|
import { getMockContext } from '../../utils/testing';
|
||||||
|
import { run as storybookBuilder } from './build-storybook.impl';
|
||||||
|
|
||||||
describe('Build storybook', () => {
|
describe('Build storybook', () => {
|
||||||
let context: MockBuilderContext;
|
let context: MockBuilderContext;
|
||||||
|
|
||||||
|
|||||||
@ -1,27 +1,18 @@
|
|||||||
import { join, sep } from 'path';
|
import { join, sep } from 'path';
|
||||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
|
||||||
import {
|
|
||||||
Tree,
|
|
||||||
Rule,
|
|
||||||
externalSchematic,
|
|
||||||
apply,
|
|
||||||
source
|
|
||||||
} from '@angular-devkit/schematics';
|
|
||||||
import { createEmptyWorkspace } from '@nrwl/workspace/src/utils/testing-utils';
|
|
||||||
import {
|
|
||||||
BuilderContext,
|
|
||||||
Target,
|
|
||||||
Architect,
|
|
||||||
ScheduleOptions
|
|
||||||
} from '@angular-devkit/architect';
|
|
||||||
import {
|
|
||||||
TestLogger,
|
|
||||||
TestingArchitectHost
|
|
||||||
} from '@angular-devkit/architect/testing';
|
|
||||||
import { JsonObject, json, schema } from '@angular-devkit/core';
|
|
||||||
import { tmpdir } from 'os';
|
import { tmpdir } from 'os';
|
||||||
import { mkdtempSync } from 'fs';
|
import { mkdtempSync } from 'fs';
|
||||||
|
|
||||||
|
import { schema } from '@angular-devkit/core';
|
||||||
|
import { externalSchematic, Rule, Tree } from '@angular-devkit/schematics';
|
||||||
|
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||||
|
import { Architect } from '@angular-devkit/architect';
|
||||||
|
import { TestingArchitectHost } from '@angular-devkit/architect/testing';
|
||||||
|
|
||||||
|
import {
|
||||||
|
createEmptyWorkspace,
|
||||||
|
MockBuilderContext
|
||||||
|
} from '@nrwl/workspace/testing';
|
||||||
|
|
||||||
const testRunner = new SchematicTestRunner(
|
const testRunner = new SchematicTestRunner(
|
||||||
'@nrwl/storybook',
|
'@nrwl/storybook',
|
||||||
join(__dirname, '../../collection.json')
|
join(__dirname, '../../collection.json')
|
||||||
@ -134,83 +125,3 @@ export async function getMockContext() {
|
|||||||
await context.addBuilderFromPackage(join(__dirname, '../..'));
|
await context.addBuilderFromPackage(join(__dirname, '../..'));
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MockBuilderContext implements BuilderContext {
|
|
||||||
id: 0;
|
|
||||||
|
|
||||||
builder: any = {};
|
|
||||||
analytics = null;
|
|
||||||
|
|
||||||
target: Target = {
|
|
||||||
project: null,
|
|
||||||
target: null
|
|
||||||
};
|
|
||||||
|
|
||||||
get currentDirectory() {
|
|
||||||
return this.architectHost.currentDirectory;
|
|
||||||
}
|
|
||||||
get workspaceRoot() {
|
|
||||||
return this.architectHost.workspaceRoot;
|
|
||||||
}
|
|
||||||
logger = new TestLogger('test');
|
|
||||||
constructor(
|
|
||||||
private architect: Architect,
|
|
||||||
private architectHost: TestingArchitectHost
|
|
||||||
) {}
|
|
||||||
|
|
||||||
async addBuilderFromPackage(path: string) {
|
|
||||||
return await this.architectHost.addBuilderFromPackage(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
async addTarget(target: Target, builderName: string) {
|
|
||||||
return await this.architectHost.addTarget(target, builderName);
|
|
||||||
}
|
|
||||||
|
|
||||||
getBuilderNameForTarget(target: Target) {
|
|
||||||
return this.architectHost.getBuilderNameForTarget(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
scheduleTarget(
|
|
||||||
target: Target,
|
|
||||||
overrides?: JsonObject,
|
|
||||||
scheduleOptions?: ScheduleOptions
|
|
||||||
) {
|
|
||||||
return this.architect.scheduleTarget(target, overrides, scheduleOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
scheduleBuilder(
|
|
||||||
name: string,
|
|
||||||
overrides?: JsonObject,
|
|
||||||
scheduleOptions?: ScheduleOptions
|
|
||||||
) {
|
|
||||||
return this.architect.scheduleBuilder(name, overrides, scheduleOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
getTargetOptions(target: Target) {
|
|
||||||
return this.architectHost.getOptionsForTarget(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
validateOptions<T extends JsonObject = JsonObject>(
|
|
||||||
options: JsonObject,
|
|
||||||
builderName: string
|
|
||||||
): Promise<T> {
|
|
||||||
return Promise.resolve<T>(options as T);
|
|
||||||
}
|
|
||||||
|
|
||||||
reportRunning() {}
|
|
||||||
|
|
||||||
reportStatus(status: string) {}
|
|
||||||
|
|
||||||
reportProgress(current: number, total?: number, status?: string) {}
|
|
||||||
|
|
||||||
addTeardown(teardown: () => Promise<void> | void) {}
|
|
||||||
|
|
||||||
async getProjectMetadata(
|
|
||||||
target: Target | string
|
|
||||||
): Promise<json.JsonObject | null> {
|
|
||||||
return (
|
|
||||||
this.architectHost &&
|
|
||||||
this.architectHost.getProjectMetadata(target as string)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,12 +1,16 @@
|
|||||||
|
import { join } from 'path';
|
||||||
|
|
||||||
import { workspaces } from '@angular-devkit/core';
|
import { workspaces } from '@angular-devkit/core';
|
||||||
import { run, WebBuildBuilderOptions } from './build.impl';
|
|
||||||
import { of } from 'rxjs';
|
import { of } from 'rxjs';
|
||||||
import * as buildWebpack from '@angular-devkit/build-webpack';
|
import * as buildWebpack from '@angular-devkit/build-webpack';
|
||||||
jest.mock('tsconfig-paths-webpack-plugin');
|
jest.mock('tsconfig-paths-webpack-plugin');
|
||||||
import TsConfigPathsPlugin from 'tsconfig-paths-webpack-plugin';
|
import TsConfigPathsPlugin from 'tsconfig-paths-webpack-plugin';
|
||||||
|
|
||||||
|
import { MockBuilderContext } from '@nrwl/workspace/testing';
|
||||||
|
|
||||||
|
import { run, WebBuildBuilderOptions } from './build.impl';
|
||||||
import * as webConfigUtils from '../../utils/web.config';
|
import * as webConfigUtils from '../../utils/web.config';
|
||||||
import { getMockContext, MockBuilderContext } from '../../utils/testing';
|
import { getMockContext } from '../../utils/testing';
|
||||||
import { join } from 'path';
|
|
||||||
import * as indexHtmlUtils from '../../utils/third-party/cli-files/utilities/index-file/write-index-html';
|
import * as indexHtmlUtils from '../../utils/third-party/cli-files/utilities/index-file/write-index-html';
|
||||||
|
|
||||||
describe('WebBuildBuilder', () => {
|
describe('WebBuildBuilder', () => {
|
||||||
|
|||||||
@ -1,10 +1,14 @@
|
|||||||
|
import { of } from 'rxjs';
|
||||||
|
import { join } from 'path';
|
||||||
|
|
||||||
|
import { workspaces } from '@angular-devkit/core';
|
||||||
|
|
||||||
|
import * as f from '@nrwl/workspace/src/utils/fileutils';
|
||||||
|
import { MockBuilderContext } from '@nrwl/workspace/testing';
|
||||||
|
|
||||||
import * as impl from './bundle.impl';
|
import * as impl from './bundle.impl';
|
||||||
import * as rr from './run-rollup';
|
import * as rr from './run-rollup';
|
||||||
import { of } from 'rxjs';
|
import { getMockContext } from '../../utils/testing';
|
||||||
import { getMockContext, MockBuilderContext } from '../../utils/testing';
|
|
||||||
import { workspaces } from '@angular-devkit/core';
|
|
||||||
import { join } from 'path';
|
|
||||||
import * as f from '@nrwl/workspace/src/utils/fileutils';
|
|
||||||
import { BundleBuilderOptions } from '../../utils/types';
|
import { BundleBuilderOptions } from '../../utils/types';
|
||||||
|
|
||||||
jest.mock('tsconfig-paths-webpack-plugin');
|
jest.mock('tsconfig-paths-webpack-plugin');
|
||||||
|
|||||||
@ -1,17 +1,12 @@
|
|||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
|
||||||
|
import { schema } from '@angular-devkit/core';
|
||||||
import { Rule, Tree } from '@angular-devkit/schematics';
|
import { Rule, Tree } from '@angular-devkit/schematics';
|
||||||
import {
|
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||||
BuilderContext,
|
import { Architect } from '@angular-devkit/architect';
|
||||||
Architect,
|
import { TestingArchitectHost } from '@angular-devkit/architect/testing';
|
||||||
Target,
|
|
||||||
ScheduleOptions
|
import { MockBuilderContext } from '@nrwl/workspace/testing';
|
||||||
} from '@angular-devkit/architect';
|
|
||||||
import {
|
|
||||||
TestingArchitectHost,
|
|
||||||
TestLogger
|
|
||||||
} from '@angular-devkit/architect/testing';
|
|
||||||
import { schema, JsonObject } from '@angular-devkit/core';
|
|
||||||
|
|
||||||
const testRunner = new SchematicTestRunner(
|
const testRunner = new SchematicTestRunner(
|
||||||
'@nrwl/web',
|
'@nrwl/web',
|
||||||
@ -45,74 +40,3 @@ export async function getMockContext() {
|
|||||||
await context.addBuilderFromPackage(join(__dirname, '../..'));
|
await context.addBuilderFromPackage(join(__dirname, '../..'));
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MockBuilderContext implements BuilderContext {
|
|
||||||
id: 0;
|
|
||||||
|
|
||||||
builder: any = {};
|
|
||||||
analytics = null;
|
|
||||||
|
|
||||||
target: Target = {
|
|
||||||
project: null,
|
|
||||||
target: null
|
|
||||||
};
|
|
||||||
|
|
||||||
get currentDirectory() {
|
|
||||||
return this.architectHost.currentDirectory;
|
|
||||||
}
|
|
||||||
get workspaceRoot() {
|
|
||||||
return this.architectHost.workspaceRoot;
|
|
||||||
}
|
|
||||||
logger = new TestLogger('test');
|
|
||||||
constructor(
|
|
||||||
private architect: Architect,
|
|
||||||
private architectHost: TestingArchitectHost
|
|
||||||
) {}
|
|
||||||
|
|
||||||
async addBuilderFromPackage(path: string) {
|
|
||||||
return await this.architectHost.addBuilderFromPackage(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
async addTarget(target: Target, builderName: string) {
|
|
||||||
return await this.architectHost.addTarget(target, builderName);
|
|
||||||
}
|
|
||||||
|
|
||||||
getBuilderNameForTarget(target: Target) {
|
|
||||||
return this.architectHost.getBuilderNameForTarget(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
scheduleTarget(
|
|
||||||
target: Target,
|
|
||||||
overrides?: JsonObject,
|
|
||||||
scheduleOptions?: ScheduleOptions
|
|
||||||
) {
|
|
||||||
return this.architect.scheduleTarget(target, overrides, scheduleOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
scheduleBuilder(
|
|
||||||
name: string,
|
|
||||||
overrides?: JsonObject,
|
|
||||||
scheduleOptions?: ScheduleOptions
|
|
||||||
) {
|
|
||||||
return this.architect.scheduleBuilder(name, overrides, scheduleOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
getTargetOptions(target: Target) {
|
|
||||||
return this.architectHost.getOptionsForTarget(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
validateOptions<T extends JsonObject = JsonObject>(
|
|
||||||
options: JsonObject,
|
|
||||||
builderName: string
|
|
||||||
): Promise<T> {
|
|
||||||
return Promise.resolve<T>(options as T);
|
|
||||||
}
|
|
||||||
|
|
||||||
reportRunning() {}
|
|
||||||
|
|
||||||
reportStatus(status: string) {}
|
|
||||||
|
|
||||||
reportProgress(current: number, total?: number, status?: string) {}
|
|
||||||
|
|
||||||
addTeardown(teardown: () => Promise<void> | void) {}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -4,6 +4,13 @@ import {
|
|||||||
WorkspaceFormat
|
WorkspaceFormat
|
||||||
} from '@angular-devkit/core/src/workspace/core';
|
} from '@angular-devkit/core/src/workspace/core';
|
||||||
import { NxJson } from '@nrwl/workspace/src/core/shared-interfaces';
|
import { NxJson } from '@nrwl/workspace/src/core/shared-interfaces';
|
||||||
|
import { Architect, BuilderContext, Target } from '@angular-devkit/architect';
|
||||||
|
import {
|
||||||
|
TestingArchitectHost,
|
||||||
|
TestLogger
|
||||||
|
} from '@angular-devkit/architect/testing';
|
||||||
|
import { JsonObject } from '@angular-devkit/core';
|
||||||
|
import { ScheduleOptions } from '@angular-devkit/architect/src/api';
|
||||||
|
|
||||||
export function getFileContent(tree: Tree, path: string): string {
|
export function getFileContent(tree: Tree, path: string): string {
|
||||||
const fileEntry = tree.get(path);
|
const fileEntry = tree.get(path);
|
||||||
@ -55,3 +62,78 @@ export function createEmptyWorkspace(tree: Tree): Tree {
|
|||||||
);
|
);
|
||||||
return tree;
|
return tree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mock context which makes testing builders easier
|
||||||
|
*/
|
||||||
|
export class MockBuilderContext implements BuilderContext {
|
||||||
|
id: 0;
|
||||||
|
|
||||||
|
builder: any = {};
|
||||||
|
analytics = null;
|
||||||
|
|
||||||
|
target: Target = {
|
||||||
|
project: null,
|
||||||
|
target: null
|
||||||
|
};
|
||||||
|
|
||||||
|
logger = new TestLogger('test');
|
||||||
|
|
||||||
|
get currentDirectory() {
|
||||||
|
return this.architectHost.currentDirectory;
|
||||||
|
}
|
||||||
|
get workspaceRoot() {
|
||||||
|
return this.architectHost.workspaceRoot;
|
||||||
|
}
|
||||||
|
constructor(
|
||||||
|
private architect: Architect,
|
||||||
|
private architectHost: TestingArchitectHost
|
||||||
|
) {}
|
||||||
|
|
||||||
|
async addBuilderFromPackage(path: string) {
|
||||||
|
return await this.architectHost.addBuilderFromPackage(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
async addTarget(target: Target, builderName: string) {
|
||||||
|
return this.architectHost.addTarget(target, builderName);
|
||||||
|
}
|
||||||
|
|
||||||
|
getBuilderNameForTarget(target: Target) {
|
||||||
|
return this.architectHost.getBuilderNameForTarget(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
scheduleTarget(
|
||||||
|
target: Target,
|
||||||
|
overrides?: JsonObject,
|
||||||
|
scheduleOptions?: ScheduleOptions
|
||||||
|
) {
|
||||||
|
return this.architect.scheduleTarget(target, overrides, scheduleOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
scheduleBuilder(
|
||||||
|
name: string,
|
||||||
|
overrides?: JsonObject,
|
||||||
|
scheduleOptions?: ScheduleOptions
|
||||||
|
) {
|
||||||
|
return this.architect.scheduleBuilder(name, overrides, scheduleOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
getTargetOptions(target: Target) {
|
||||||
|
return this.architectHost.getOptionsForTarget(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
validateOptions<T extends JsonObject = JsonObject>(
|
||||||
|
options: JsonObject,
|
||||||
|
builderName: string
|
||||||
|
): Promise<T> {
|
||||||
|
return Promise.resolve<T>(options as T);
|
||||||
|
}
|
||||||
|
|
||||||
|
reportRunning() {}
|
||||||
|
|
||||||
|
reportStatus(status: string) {}
|
||||||
|
|
||||||
|
reportProgress(current: number, total?: number, status?: string) {}
|
||||||
|
|
||||||
|
addTeardown(teardown: () => Promise<void> | void) {}
|
||||||
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
export {
|
export {
|
||||||
createEmptyWorkspace,
|
createEmptyWorkspace,
|
||||||
getFileContent
|
getFileContent,
|
||||||
|
MockBuilderContext
|
||||||
} from './src/utils/testing-utils';
|
} from './src/utils/testing-utils';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user