Skip to content

Commit

Permalink
fix(angular): add eslint to protractor apps (nrwl#6524)
Browse files Browse the repository at this point in the history
  • Loading branch information
FrozenPandaz authored and ManojBahuguna committed Sep 16, 2021
1 parent bc4b45f commit dd48d87
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 29 deletions.
59 changes: 52 additions & 7 deletions packages/angular/src/generators/application/application.spec.ts
@@ -1,21 +1,19 @@
import type { Tree } from '@nrwl/devkit';
import type { Schema } from './schema';

import * as devkit from '@nrwl/devkit';
import {
readJson,
updateJson,
NxJsonConfiguration,
readProjectConfiguration,
parseJson,
readJson,
readProjectConfiguration,
updateJson,
} from '@nrwl/devkit';
import type { Schema } from './schema';
import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing';
import { Linter } from '@nrwl/linter';

import { E2eTestRunner, UnitTestRunner } from '../../utils/test-runners';
import { applicationGenerator } from './application';

import * as devkit from '@nrwl/devkit';

describe('app', () => {
let appTree: Tree;

Expand Down Expand Up @@ -366,6 +364,38 @@ describe('app', () => {
`);
});

it('should add a lint target when e2e test runner is protractor', async () => {
await generateApp(appTree, 'myApp', {
linter: Linter.EsLint,
e2eTestRunner: E2eTestRunner.Protractor,
});
const workspaceJson = readJson(appTree, 'workspace.json');
expect(workspaceJson.projects['my-app'].architect.lint)
.toMatchInlineSnapshot(`
Object {
"builder": "@nrwl/linter:eslint",
"options": Object {
"lintFilePatterns": Array [
"apps/my-app/src/**/*.ts",
"apps/my-app/src/**/*.html",
],
},
}
`);
expect(appTree.exists('apps/my-app-e2e/.eslintrc.json')).toBeTruthy();
expect(workspaceJson.projects['my-app-e2e'].architect.lint)
.toMatchInlineSnapshot(`
Object {
"builder": "@nrwl/linter:eslint",
"options": Object {
"lintFilePatterns": Array [
"apps/my-app-e2e/**/*.ts",
],
},
}
`);
});

it('should add valid eslint JSON configuration which extends from Nx presets', async () => {
await generateApp(appTree, 'myApp', { linter: Linter.EsLint });

Expand Down Expand Up @@ -426,6 +456,21 @@ describe('app', () => {
await generateApp(appTree, 'myApp', { linter: Linter.None });
const workspaceJson = readJson(appTree, 'workspace.json');
expect(workspaceJson.projects['my-app'].architect.lint).toBeUndefined();
expect(
workspaceJson.projects['my-app-e2e'].architect.lint
).toBeUndefined();
});

it('should not add an architect target for lint when e2e test runner is protractor', async () => {
await generateApp(appTree, 'myApp', {
linter: Linter.None,
e2eTestRunner: E2eTestRunner.Protractor,
});
const workspaceJson = readJson(appTree, 'workspace.json');
expect(workspaceJson.projects['my-app'].architect.lint).toBeUndefined();
expect(
workspaceJson.projects['my-app-e2e'].architect.lint
).toBeUndefined();
});
});
});
Expand Down
26 changes: 19 additions & 7 deletions packages/angular/src/generators/application/lib/add-e2e.ts
Expand Up @@ -9,29 +9,31 @@ import { addProtractor } from './add-protractor';
import { removeScaffoldedE2e } from './remove-scaffolded-e2e';
import { updateE2eProject } from './update-e2e-project';
import { convertToNxProjectGenerator } from '@nrwl/workspace';
import { Linter, lintProjectGenerator } from '@nrwl/linter';
import { joinPathFragments } from '@nrwl/devkit';

/**
* Add E2E Config
*
* @param host Nx Devkit Virtual Tree
* @param tree Nx Devkit Virtual Tree
* @param options Normalized Schema
* @param e2eProjectRoot Raw E2E Project Root that Angular tries to write to
*
* @returns Function to run to add Cypres config after intial app files have been moved to correct location
*/
export async function addE2e(
host: Tree,
tree: Tree,
options: NormalizedSchema,
e2eProjectRoot: string
) {
if (options.e2eTestRunner === E2eTestRunner.Protractor) {
await addProtractor(host, options);
await addProtractor(tree, options);
} else {
removeScaffoldedE2e(host, options, e2eProjectRoot);
removeScaffoldedE2e(tree, options, e2eProjectRoot);
}

if (options.e2eTestRunner === 'cypress') {
await cypressProjectGenerator(host, {
await cypressProjectGenerator(tree, {
name: options.e2eProjectName,
directory: options.directory,
project: options.name,
Expand All @@ -42,11 +44,21 @@ export async function addE2e(
}

if (options.e2eTestRunner === E2eTestRunner.Protractor) {
updateE2eProject(host, options);
updateE2eProject(tree, options);
if (options.standaloneConfig) {
convertToNxProjectGenerator(host, {
convertToNxProjectGenerator(tree, {
project: `${options.e2eProjectName}`,
});
}
if (options.linter === Linter.EsLint) {
await lintProjectGenerator(tree, {
project: options.e2eProjectName,
linter: options.linter,
eslintFilePatterns: [
joinPathFragments(options.e2eProjectRoot, '**/*.ts'),
],
skipFormat: true,
});
}
}
}
@@ -1,15 +1,12 @@
import type { ProjectConfiguration, Tree } from '@nrwl/devkit';
import type { NormalizedSchema } from './normalized-schema';

import {
offsetFromRoot,
updateJson,
addProjectConfiguration,
offsetFromRoot,
readProjectConfiguration,
updateJson,
updateProjectConfiguration,
ProjectType,
} from '@nrwl/devkit';
import { Linter } from '@nrwl/linter';
import type { NormalizedSchema } from './normalized-schema';

export function updateE2eProject(tree: Tree, options: NormalizedSchema) {
const spec = `${options.e2eProjectRoot}/src/app.e2e-spec.ts`;
Expand All @@ -32,15 +29,6 @@ export function updateE2eProject(tree: Tree, options: NormalizedSchema) {
projectType: 'application',
targets: {
e2e: proj.targets.e2e,
lint:
options.linter === Linter.None
? undefined
: {
executor: '@nrwl/linter:eslint',
options: {
lintFilePatterns: [`${options.e2eProjectRoot}/**/*.ts`],
},
},
},
};
project.targets.e2e.options.protractorConfig = `${options.e2eProjectRoot}/protractor.conf.js`;
Expand Down

0 comments on commit dd48d87

Please sign in to comment.