diff --git a/packages/node/src/builders/execute/execute.impl.spec.ts b/packages/node/src/builders/execute/execute.impl.spec.ts index c768b5710a814..a398bba4bfcc4 100644 --- a/packages/node/src/builders/execute/execute.impl.spec.ts +++ b/packages/node/src/builders/execute/execute.impl.spec.ts @@ -5,7 +5,10 @@ import { } from './execute.impl'; import { of, from } from 'rxjs'; 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'); let { fork } = require('child_process'); diff --git a/packages/node/src/utils/testing.ts b/packages/node/src/utils/testing.ts index 1463551a58eae..281c68427d57d 100644 --- a/packages/node/src/utils/testing.ts +++ b/packages/node/src/utils/testing.ts @@ -1,13 +1,12 @@ 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 { - TestingArchitectHost, - TestLogger -} from '@angular-devkit/architect/testing'; -import { schema, JsonObject } from '@angular-devkit/core'; -import { Architect, BuilderContext, Target } from '@angular-devkit/architect'; -import { ScheduleOptions } from '@angular-devkit/architect/src/api'; +import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; +import { Architect } from '@angular-devkit/architect'; +import { TestingArchitectHost } from '@angular-devkit/architect/testing'; + +import { MockBuilderContext } from '@nrwl/workspace/testing'; const testRunner = new SchematicTestRunner( '@nrwl/node', @@ -41,74 +40,3 @@ export async function getMockContext() { await context.addBuilderFromPackage(join(__dirname, '../..')); 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( - options: JsonObject, - builderName: string - ): Promise { - return Promise.resolve(options as T); - } - - reportRunning() {} - - reportStatus(status: string) {} - - reportProgress(current: number, total?: number, status?: string) {} - - addTeardown(teardown: () => Promise | void) {} -} diff --git a/packages/storybook/src/builders/build-storybook/build-storybook.impl.spec.ts b/packages/storybook/src/builders/build-storybook/build-storybook.impl.spec.ts index 2cf07df810ae1..34ba4507cafa1 100644 --- a/packages/storybook/src/builders/build-storybook/build-storybook.impl.spec.ts +++ b/packages/storybook/src/builders/build-storybook/build-storybook.impl.spec.ts @@ -1,8 +1,12 @@ -import { run as storybookBuilder } from './build-storybook.impl'; -import { MockBuilderContext, getMockContext } from '../../utils/testing'; import { join } from 'path'; + 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', () => { let context: MockBuilderContext; diff --git a/packages/storybook/src/utils/testing.ts b/packages/storybook/src/utils/testing.ts index 17d070e01504b..cace457095ebe 100644 --- a/packages/storybook/src/utils/testing.ts +++ b/packages/storybook/src/utils/testing.ts @@ -1,27 +1,18 @@ 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 { 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( '@nrwl/storybook', join(__dirname, '../../collection.json') @@ -134,83 +125,3 @@ export async function getMockContext() { await context.addBuilderFromPackage(join(__dirname, '../..')); 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( - options: JsonObject, - builderName: string - ): Promise { - return Promise.resolve(options as T); - } - - reportRunning() {} - - reportStatus(status: string) {} - - reportProgress(current: number, total?: number, status?: string) {} - - addTeardown(teardown: () => Promise | void) {} - - async getProjectMetadata( - target: Target | string - ): Promise { - return ( - this.architectHost && - this.architectHost.getProjectMetadata(target as string) - ); - } -} diff --git a/packages/web/src/builders/build/build.impl.spec.ts b/packages/web/src/builders/build/build.impl.spec.ts index fbea3df0c1252..8c12d28222835 100644 --- a/packages/web/src/builders/build/build.impl.spec.ts +++ b/packages/web/src/builders/build/build.impl.spec.ts @@ -1,12 +1,16 @@ +import { join } from 'path'; + import { workspaces } from '@angular-devkit/core'; -import { run, WebBuildBuilderOptions } from './build.impl'; import { of } from 'rxjs'; import * as buildWebpack from '@angular-devkit/build-webpack'; jest.mock('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 { getMockContext, MockBuilderContext } from '../../utils/testing'; -import { join } from 'path'; +import { getMockContext } from '../../utils/testing'; import * as indexHtmlUtils from '../../utils/third-party/cli-files/utilities/index-file/write-index-html'; describe('WebBuildBuilder', () => { diff --git a/packages/web/src/builders/bundle/bundle.impl.spec.ts b/packages/web/src/builders/bundle/bundle.impl.spec.ts index c328f2c824df2..f349ee9bb4d1f 100644 --- a/packages/web/src/builders/bundle/bundle.impl.spec.ts +++ b/packages/web/src/builders/bundle/bundle.impl.spec.ts @@ -1,10 +1,14 @@ -import * as impl from './bundle.impl'; -import * as rr from './run-rollup'; import { of } from 'rxjs'; -import { getMockContext, MockBuilderContext } from '../../utils/testing'; -import { workspaces } from '@angular-devkit/core'; 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 rr from './run-rollup'; +import { getMockContext } from '../../utils/testing'; import { BundleBuilderOptions } from '../../utils/types'; jest.mock('tsconfig-paths-webpack-plugin'); diff --git a/packages/web/src/utils/testing.ts b/packages/web/src/utils/testing.ts index bed99dd421fa0..db6c328910954 100644 --- a/packages/web/src/utils/testing.ts +++ b/packages/web/src/utils/testing.ts @@ -1,17 +1,12 @@ 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 { - BuilderContext, - Architect, - Target, - ScheduleOptions -} from '@angular-devkit/architect'; -import { - TestingArchitectHost, - TestLogger -} from '@angular-devkit/architect/testing'; -import { schema, JsonObject } from '@angular-devkit/core'; +import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; +import { Architect } from '@angular-devkit/architect'; +import { TestingArchitectHost } from '@angular-devkit/architect/testing'; + +import { MockBuilderContext } from '@nrwl/workspace/testing'; const testRunner = new SchematicTestRunner( '@nrwl/web', @@ -45,74 +40,3 @@ export async function getMockContext() { await context.addBuilderFromPackage(join(__dirname, '../..')); 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( - options: JsonObject, - builderName: string - ): Promise { - return Promise.resolve(options as T); - } - - reportRunning() {} - - reportStatus(status: string) {} - - reportProgress(current: number, total?: number, status?: string) {} - - addTeardown(teardown: () => Promise | void) {} -} diff --git a/packages/workspace/src/utils/testing-utils.ts b/packages/workspace/src/utils/testing-utils.ts index 4eb5572c64979..42578a5f3542b 100644 --- a/packages/workspace/src/utils/testing-utils.ts +++ b/packages/workspace/src/utils/testing-utils.ts @@ -4,6 +4,13 @@ import { WorkspaceFormat } from '@angular-devkit/core/src/workspace/core'; 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 { const fileEntry = tree.get(path); @@ -55,3 +62,78 @@ export function createEmptyWorkspace(tree: Tree): 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( + options: JsonObject, + builderName: string + ): Promise { + return Promise.resolve(options as T); + } + + reportRunning() {} + + reportStatus(status: string) {} + + reportProgress(current: number, total?: number, status?: string) {} + + addTeardown(teardown: () => Promise | void) {} +} diff --git a/packages/workspace/testing.ts b/packages/workspace/testing.ts index 8aac55b3a6674..30d34daecf281 100644 --- a/packages/workspace/testing.ts +++ b/packages/workspace/testing.ts @@ -1,4 +1,5 @@ export { createEmptyWorkspace, - getFileContent + getFileContent, + MockBuilderContext } from './src/utils/testing-utils';