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 = {