From e49671f2ad9201932006fe40c1ca749e587f2c16 Mon Sep 17 00:00:00 2001 From: Caleb Ukle Date: Tue, 12 Apr 2022 14:38:59 -0500 Subject: [PATCH] fix(testing): provide descriptive message when the project does not have targets defined. (#9795) when trying to add cypress to a project that does not contain targets the project will error out because of a null reference. Now when trying to add to a project without a serve target a more descriptive message is logged stating to add a serve target or use the --baseUrl flag Note: a future update should add the parameter to override what target to use if so desired. ISSUES CLOSED: #9756 --- .../cypress-project/cypress-project.spec.ts | 17 +++++++++++++++++ .../cypress-project/cypress-project.ts | 11 ++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/cypress/src/generators/cypress-project/cypress-project.spec.ts b/packages/cypress/src/generators/cypress-project/cypress-project.spec.ts index 783a8cf17cc52..87ebbe6ac8bb9 100644 --- a/packages/cypress/src/generators/cypress-project/cypress-project.spec.ts +++ b/packages/cypress/src/generators/cypress-project/cypress-project.spec.ts @@ -413,6 +413,23 @@ describe('schematic:cypress-project', () => { expect(projectConfig.tags).toEqual([]); }); }); + + it('should not throw an error when --project does not have targets', async () => { + const projectConf = readProjectConfiguration(tree, 'my-app'); + delete projectConf.targets; + + updateProjectConfiguration(tree, 'my-app', projectConf); + await cypressProjectGenerator(tree, { + name: 'my-app-e2e', + project: 'my-app', + linter: Linter.EsLint, + }); + + const projectConfig = readProjectConfiguration(tree, 'my-app-e2e'); + expect(projectConfig.targets['e2e'].options.devServerTarget).toEqual( + 'my-app:serve' + ); + }); }); describe('--linter', () => { diff --git a/packages/cypress/src/generators/cypress-project/cypress-project.ts b/packages/cypress/src/generators/cypress-project/cypress-project.ts index 27c9e0fbabf8c..5e73d286dc928 100644 --- a/packages/cypress/src/generators/cypress-project/cypress-project.ts +++ b/packages/cypress/src/generators/cypress-project/cypress-project.ts @@ -13,6 +13,8 @@ import { Tree, updateJson, ProjectConfiguration, + stripIndents, + logger, } from '@nrwl/devkit'; import { Linter, lintProjectGenerator } from '@nrwl/linter'; import { runTasksInSerial } from '@nrwl/workspace/src/utilities/run-tasks-in-serial'; @@ -82,8 +84,15 @@ function addProject(tree: Tree, options: CypressProjectSchema) { }; } else if (options.project) { const project = readProjectConfiguration(tree, options.project); + + if (!project.targets) { + logger.warn(stripIndents` + NOTE: Project, "${options.project}", does not have any targets defined and a baseUrl was not provided. Nx will use + "${options.project}:serve" as the devServerTarget. But you may need to define this target within the project, "${options.project}". + `); + } const devServerTarget = - project.targets.serve && project.targets.serve.defaultConfiguration + project.targets?.serve && project.targets?.serve?.defaultConfiguration ? `${options.project}:serve:${project.targets.serve.defaultConfiguration}` : `${options.project}:serve`; e2eProjectConfig = {