diff --git a/packages/cypress/src/generators/cypress-project/__snapshots__/cypress-project.spec.ts.snap b/packages/cypress/src/generators/cypress-project/__snapshots__/cypress-project.spec.ts.snap index 153686f3c9cd45..422681fbca44ea 100644 --- a/packages/cypress/src/generators/cypress-project/__snapshots__/cypress-project.spec.ts.snap +++ b/packages/cypress/src/generators/cypress-project/__snapshots__/cypress-project.spec.ts.snap @@ -1,5 +1,20 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`schematic:cypress-project Cypress Project --project should not throw an error when --project does not have targets 1`] = ` +Object { + "configurations": Object { + "production": Object { + "devServerTarget": "my-app:serve:production", + }, + }, + "executor": "@nrwl/cypress:cypress", + "options": Object { + "cypressConfig": "apps/my-app-e2e/cypress.json", + "devServerTarget": "my-app:serve", + }, +} +`; + exports[`schematic:cypress-project Cypress Project nested should set right path names in \`tsconfig.e2e.json\` 1`] = ` Object { "compilerOptions": Object { 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 783a8cf17cc52e..b3826f16d8ea4e 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,21 @@ 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']).toMatchSnapshot(); + }); }); 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 27c9e0fbabf8c5..5e73d286dc9283 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 = {