diff --git a/cli/types/cypress-npm-api.d.ts b/cli/types/cypress-npm-api.d.ts index 269889d6ffd0..126f50202863 100644 --- a/cli/types/cypress-npm-api.d.ts +++ b/cli/types/cypress-npm-api.d.ts @@ -60,7 +60,7 @@ declare namespace CypressCommandLine { */ headless: boolean /** - * Specify your secret record key + * Specify your secret Record Key */ key: string /** diff --git a/guides/release-process.md b/guides/release-process.md index dd309fea4c96..debf1b71bfc3 100644 --- a/guides/release-process.md +++ b/guides/release-process.md @@ -82,7 +82,7 @@ In the following instructions, "X.Y.Z" is used to denote the [next version of Cy - Go into a project, run a quick test, make sure things look right - Optionally, install the new version into an established project and run the tests there - [cypress-realworld-app](https://github.com/cypress-io/cypress-realworld-app) uses yarn and represents a typical consumer implementation. - - Optionally, do more thorough tests, for example test the new version of Cypress against the Cypress dashboard repo. + - Optionally, do more thorough tests, for example test the new version of Cypress against the Cypress Dashboard repo. 5. Log into AWS SSO with `aws sso login --profile `. If you have setup your credentials under a different profile than `prod`, be sure to set the `AWS_PROFILE` environment variable to that profile name for the remaining steps. For example, if you are using `production` instead of `prod`, do `export AWS_PROFILE=production`. @@ -119,7 +119,7 @@ In the following instructions, "X.Y.Z" is used to denote the [next version of Cy - Go into a project, run a quick test, make sure things look right - Install the new version into an established project and run the tests there - [cypress-realworld-app](https://github.com/cypress-io/cypress-realworld-app) uses yarn and represents a typical consumer implementation. - - Optionally, do more thorough tests, for example test the new version of Cypress against the Cypress dashboard repo. + - Optionally, do more thorough tests, for example test the new version of Cypress against the Cypress Dashboard repo. 11. Create or review the release-specific documentation and changelog in [cypress-documentation](https://github.com/cypress-io/cypress-documentation). If there is not already a release-specific PR open, create one. This PR must be merged, built, and deployed before moving to the next step. - Use [`release-automations`](https://github.com/cypress-io/release-automations)'s `issues-in-release` tool to generate a starting point for the changelog, based off of ZenHub: diff --git a/npm/webpack-dev-server/cypress/e2e/react.cy.ts b/npm/webpack-dev-server/cypress/e2e/react.cy.ts index 8071d1807292..310d8bfe66fc 100644 --- a/npm/webpack-dev-server/cypress/e2e/react.cy.ts +++ b/npm/webpack-dev-server/cypress/e2e/react.cy.ts @@ -131,7 +131,7 @@ for (const project of WEBPACK_REACT) { cy.findByTestId('new-spec-button').click() cy.findByRole('dialog').within(() => { cy.get('input').clear().type('src/App.cy.jsx') - cy.contains('button', 'Create Spec').click() + cy.contains('button', 'Create spec').click() }) cy.findByRole('dialog').within(() => { diff --git a/packages/app/README.md b/packages/app/README.md index cca5801ce754..eab9360c4b58 100644 --- a/packages/app/README.md +++ b/packages/app/README.md @@ -16,7 +16,7 @@ This is the front-end for the Cypress App. Cypress has two modes: `run` and `open`. We want run mode to be as light and fast as possible, since this is the mode used to run on CI machines, etc. Run mode has minimal UI showing only what is necessary. Open mode is the interactive experience. -- **`open`** mode is driven using GraphQL and urql. It shows the full Cypress app, include the top nav, side nav, spec list, etc. You can change between testing types, check your latest runs on the Cypress dashboard, update settings, etc. +- **`open`** mode is driven using GraphQL and urql. It shows the full Cypress app, include the top nav, side nav, spec list, etc. You can change between testing types, check your latest runs on the Cypress Dashboard, update settings, etc. - **`run`** mode is does not rely on GraphQL. This is so we can be as performant as possible. It only renders the "runner" part of the UI, which is comprised of the command log, Spec Runner header, and AUT iframe. The two modes are composed using the same logic, but have slightly different components. You can see where the differences are in `Runner.vue`(src/pages/Specs/Runner.vue). Notice that `` receives a `gql` prop, since it uses GraphQL, and `` does not. diff --git a/packages/app/cypress/e2e/create-from-component.cy.ts b/packages/app/cypress/e2e/create-from-component.cy.ts index b38809f9be53..5771917cb9b3 100644 --- a/packages/app/cypress/e2e/create-from-component.cy.ts +++ b/packages/app/cypress/e2e/create-from-component.cy.ts @@ -28,7 +28,7 @@ function validateCreateFromComponentCard (beforeEachFn: () => void, expectedSpec it('Lists Vue components in the project', () => { cy.get('@ComponentCard').click() - cy.findByText('2 Matches').should('be.visible') + cy.findByText('2 matches').should('be.visible') cy.findByText('App').should('be.visible') cy.findByText('HelloWorld').should('be.visible') @@ -38,11 +38,11 @@ function validateCreateFromComponentCard (beforeEachFn: () => void, expectedSpec cy.get('@ComponentCard').click() cy.findByText('*.vue').should('be.visible') - cy.findByText('2 Matches').should('be.visible') + cy.findByText('2 matches').should('be.visible') cy.findByLabelText('file-name-input').type('HelloWorld') cy.findByText('HelloWorld').should('be.visible') - cy.findByText('1 of 2 Matches').should('be.visible') + cy.findByText('1 of 2 matches').should('be.visible') cy.findByText('App').should('not.exist') }) @@ -105,7 +105,7 @@ describe('Create from component card', () => { cy.startAppServer('component') cy.visitApp() - cy.findByText('New Spec').click() + cy.findByText('New spec').click() cy.findAllByTestId('card').eq(0).as('ComponentCard') }, 'src/specs-folder/HelloWorld.cy.js') }) diff --git a/packages/app/cypress/e2e/cypress-in-cypress-component.cy.ts b/packages/app/cypress/e2e/cypress-in-cypress-component.cy.ts index b4b906d248e0..4ff7243bc224 100644 --- a/packages/app/cypress/e2e/cypress-in-cypress-component.cy.ts +++ b/packages/app/cypress/e2e/cypress-in-cypress-component.cy.ts @@ -38,21 +38,21 @@ describe('Cypress In Cypress CT', { viewportWidth: 1500, defaultCommandTimeout: snapshotAUTPanel('cy.get selector') - cy.findByTestId('playground-num-elements').contains('1 Match') + cy.findByTestId('playground-num-elements').contains('1 match') cy.window().then((win) => cy.spy(win.console, 'log')) cy.findByTestId('playground-print').click().window().then((win) => { expect(win.console.log).to.have.been.calledWith('%cCommand: ', 'font-weight: bold', 'cy.get(\'[data-cy-root]\')') }) - cy.findByLabelText('Selector Methods').click() + cy.findByLabelText('Selector methods').click() cy.findByRole('menuitem', { name: 'cy.contains' }).click() cy.findByTestId('playground-selector').clear().type('Component Test') snapshotAUTPanel('cy.contains selector') - cy.findByTestId('playground-num-elements').contains('1 Match') + cy.findByTestId('playground-num-elements').contains('1 match') }) it('navigation between specs and other parts of the app works', () => { diff --git a/packages/app/cypress/e2e/cypress-in-cypress-e2e.cy.ts b/packages/app/cypress/e2e/cypress-in-cypress-e2e.cy.ts index c8605e3b20a3..79ef8ed39f26 100644 --- a/packages/app/cypress/e2e/cypress-in-cypress-e2e.cy.ts +++ b/packages/app/cypress/e2e/cypress-in-cypress-e2e.cy.ts @@ -45,7 +45,7 @@ describe('Cypress In Cypress E2E', { viewportWidth: 1500, defaultCommandTimeout: snapshotAUTPanel('cy.get selector') - cy.findByTestId('playground-num-elements').contains('3 Matches') + cy.findByTestId('playground-num-elements').contains('3 matches') // This validates that each matching element is covered by the playground highlighting cy.get('iframe.aut-iframe').its('0.contentDocument.body').then(cy.wrap).within(() => { @@ -59,14 +59,14 @@ describe('Cypress In Cypress E2E', { viewportWidth: 1500, defaultCommandTimeout: }) }) - cy.findByLabelText('Selector Methods').click() + cy.findByLabelText('Selector methods').click() cy.findByRole('menuitem', { name: 'cy.contains' }).click() cy.findByTestId('playground-selector').clear().type('Item 1') snapshotAUTPanel('cy.contains selector') - cy.findByTestId('playground-num-elements').contains('1 Match') + cy.findByTestId('playground-num-elements').contains('1 match') cy.window().then((win) => cy.spy(win.console, 'log')) cy.findByTestId('playground-print').click().window().then((win) => { @@ -202,7 +202,7 @@ describe('Cypress In Cypress E2E', { viewportWidth: 1500, defaultCommandTimeout: cy.contains('withFailure.spec').click() cy.contains('[aria-controls=reporter-inline-specs-list]', 'Specs') cy.get('body').type('f') - cy.contains('Search Specs') + cy.contains('Search specs') cy.contains('withWait.spec').click() cy.waitForSpecToFinish() diff --git a/packages/app/cypress/e2e/cypress-in-cypress.cy.ts b/packages/app/cypress/e2e/cypress-in-cypress.cy.ts index a8f46938c63a..d49d3bf8aaba 100644 --- a/packages/app/cypress/e2e/cypress-in-cypress.cy.ts +++ b/packages/app/cypress/e2e/cypress-in-cypress.cy.ts @@ -224,7 +224,7 @@ describe('Cypress in Cypress', { viewportWidth: 1500, defaultCommandTimeout: 100 cy.get('body').click() }) - cy.get('[data-cy="playground-num-elements"]').contains('1 Match') + cy.get('[data-cy="playground-num-elements"]').contains('1 match') }) it(`hides reporter when NO_COMMAND_LOG is set in open mode for ${testingType}`, () => { diff --git a/packages/app/cypress/e2e/runs.cy.ts b/packages/app/cypress/e2e/runs.cy.ts index 9a79cb4aecff..c03d84a13489 100644 --- a/packages/app/cypress/e2e/runs.cy.ts +++ b/packages/app/cypress/e2e/runs.cy.ts @@ -81,7 +81,7 @@ describe('App: Runs', { viewportWidth: 1200 }, () => { }) cy.findByRole('dialog', { name: 'Log in to Cypress' }).within(() => { - cy.contains('button', 'Log In').click() + cy.contains('button', 'Log in').click() }) cy.withCtx((ctx, o) => { @@ -272,10 +272,10 @@ describe('App: Runs', { viewportWidth: 1200 }, () => { cy.contains('button', 'Log in to the Cypress Dashboard').click() cy.findByRole('dialog', { name: 'Log in to Cypress' }).as('logInModal').within(() => { - cy.findByRole('button', { name: 'Log In' }).click() + cy.findByRole('button', { name: 'Log in' }).click() }) - cy.findByRole('dialog', { name: 'Login Successful' }).within(() => { + cy.findByRole('dialog', { name: 'Login successful' }).within(() => { cy.findByRole('button', { name: 'Connect project' }).click() }) @@ -443,7 +443,7 @@ describe('App: Runs', { viewportWidth: 1200 }, () => { cy.findByText(defaultMessages.runs.errors.notFound.button).should('be.visible').click() cy.get('[aria-modal="true"]').should('exist') cy.get('[data-cy="selectProject"] button').should('have.text', 'Mock Project') - cy.findByText(defaultMessages.runs.connect.modal.selectProject.connectProject).click() + cy.get('[data-cy="connect-project"]').click() cy.get('[data-cy="runs"]', { timeout: 7500 }) }) }) @@ -591,7 +591,7 @@ describe('App: Runs', { viewportWidth: 1200 }, () => { scaffoldTestingTypeAndVisitRunsPage('component') cy.contains(defaultMessages.runs.empty.title).should('be.visible') cy.contains(defaultMessages.runs.empty.description).should('be.visible') - cy.contains('cypress run --component --record --key 2aaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa').should('be.visible') + cy.findByDisplayValue('npx cypress run --component --record --key 2aaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa').should('be.visible') }) it('displays how to record prompt when connected and no runs in E2E', () => { @@ -599,7 +599,7 @@ describe('App: Runs', { viewportWidth: 1200 }, () => { cy.contains(defaultMessages.runs.empty.title).should('be.visible') cy.contains(defaultMessages.runs.empty.description).should('be.visible') - cy.contains('cypress run --record --key 2aaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa').should('be.visible') + cy.findByDisplayValue('npx cypress run --record --key 2aaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa').should('be.visible') }) it('displays a copy button and copies correct command in Component Testing', () => { diff --git a/packages/app/cypress/e2e/settings.cy.ts b/packages/app/cypress/e2e/settings.cy.ts index e296eda4c084..672e7cfaba25 100644 --- a/packages/app/cypress/e2e/settings.cy.ts +++ b/packages/app/cypress/e2e/settings.cy.ts @@ -17,11 +17,11 @@ describe('App: Settings', () => { cy.get(SidebarSettingsLinkSelector).click() cy.contains('[data-cy="app-header-bar"]', 'Settings') - cy.contains('[data-cy="app-header-bar"] button', 'Log In').should('be.visible') + cy.contains('[data-cy="app-header-bar"] button', 'Log in').should('be.visible') - cy.findByText('Device Settings').should('be.visible') - cy.findByText('Project Settings').should('be.visible') - cy.findByText('Dashboard Settings').should('be.visible') + cy.findByText('Device settings').should('be.visible') + cy.findByText('Project settings').should('be.visible') + cy.findByText('Dashboard settings').should('be.visible') }) describe('Cloud Settings', () => { @@ -33,7 +33,7 @@ describe('App: Settings', () => { cy.startAppServer('e2e') cy.visitApp() cy.get(SidebarSettingsLinkSelector).click() - cy.findByText('Dashboard Settings').click() + cy.findByText('Dashboard settings').click() cy.findByText('Project ID').should('be.visible') cy.get('[data-cy="code-box"]').should('contain', 'fromCli') cy.findByText('Copy').click() @@ -49,17 +49,17 @@ describe('App: Settings', () => { cy.visitApp() cy.get(SidebarSettingsLinkSelector).click() - cy.findByText('Dashboard Settings').click() - cy.findByText('Record Key').should('be.visible') + cy.findByText('Dashboard settings').click() + cy.findByText('Record key').should('be.visible') }) - it('obfuscates each record key and has a button to reveal the key', () => { + it('obfuscates each Record Key and has a button to reveal the key', () => { cy.startAppServer('e2e') cy.loginUser() cy.visitApp() cy.get(SidebarSettingsLinkSelector).click() - cy.findByText('Dashboard Settings').click() + cy.findByText('Dashboard settings').click() cy.get('[data-cy="code-box"]').should('contain', '***') cy.get('[aria-label="Record Key Visibility Toggle"]').click() cy.get('[data-cy="code-box"]').should('contain', '2aaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa') @@ -69,8 +69,8 @@ describe('App: Settings', () => { cy.startAppServer('e2e') cy.loginUser() cy.visitApp('settings') - cy.findByText('Dashboard Settings').click() - cy.findByText('Manage Keys').click() + cy.findByText('Dashboard settings').click() + cy.findByText('Manage keys').click() cy.withRetryableCtx((ctx) => { expect((ctx.actions.electron.openExternal as SinonStub).lastCall.lastArg).to.eq('http:/test.cloud/cloud-project/settings') }) @@ -97,13 +97,13 @@ describe('App: Settings', () => { // Wait for the test to pass, so the test is completed cy.get('.passed > .num').should('contain', 1) cy.get(SidebarSettingsLinkSelector).click() - cy.contains('Dashboard Settings').click() + cy.contains('Dashboard settings').click() // Assert the data is not there before it arrives - cy.contains('Record Key').should('not.exist') - cy.contains('Record Key') + cy.contains('Record key').should('not.exist') + cy.contains('Record key') }) - it('clears nested cloud data (record key) upon logging out', () => { + it('clears nested cloud data (Record Key) upon logging out', () => { cy.startAppServer('e2e') cy.loginUser() cy.visitApp() @@ -112,23 +112,23 @@ describe('App: Settings', () => { }) cy.findByTestId('sidebar-link-settings-page').click() - cy.contains('Dashboard Settings').click() - cy.contains('Record Key').should('exist') + cy.contains('Dashboard settings').click() + cy.contains('Record key').should('exist') cy.findByTestId('sidebar-link-runs-page').click() cy.findByTestId('user-avatar-title').click() - cy.findByRole('button', { name: 'Log Out' }).click() + cy.findByRole('button', { name: 'Log out' }).click() cy.withRetryableCtx((ctx, o) => { expect(ctx.actions.auth.logout).to.have.been.calledOnce }) cy.findByTestId('sidebar-link-settings-page').click() - cy.contains('Dashboard Settings').click() - cy.contains('Record Key').should('not.exist') + cy.contains('Dashboard settings').click() + cy.contains('Record key').should('not.exist') }) }) - describe('Project Settings', () => { + describe('Project settings', () => { it('shows the Spec Patterns section (default specPattern value)', () => { cy.scaffoldProject('simple-ct') cy.openProject('simple-ct') @@ -137,8 +137,8 @@ describe('App: Settings', () => { cy.visitApp() cy.findByTestId('sidebar-link-settings-page').click() - cy.findByText('Project Settings').click() - cy.get('[data-cy="file-match-indicator"]').contains('2 Matches') + cy.findByText('Project settings').click() + cy.get('[data-cy="file-match-indicator"]').contains('2 matches') cy.get('[data-cy="spec-pattern"]').contains('**/*.cy.{js,jsx,ts,tsx}') cy.get('[data-cy="settings-specPatterns"').within(() => { @@ -155,8 +155,8 @@ describe('App: Settings', () => { cy.visitApp() cy.get(SidebarSettingsLinkSelector).click() - cy.findByText('Project Settings').click() - cy.get('[data-cy="file-match-indicator"]').contains('41 Matches') + cy.findByText('Project settings').click() + cy.get('[data-cy="file-match-indicator"]').contains('41 matches') cy.get('[data-cy="spec-pattern"]').contains('tests/**/*') }) @@ -166,7 +166,7 @@ describe('App: Settings', () => { cy.visitApp() cy.get(SidebarSettingsLinkSelector).click() - cy.findByText('Project Settings').click() + cy.findByText('Project settings').click() cy.get('[data-cy="settings-experiments"]').within(() => { cy.validateExternalLink({ name: 'Learn more.', @@ -229,7 +229,7 @@ describe('App: Settings', () => { cy.visitApp() cy.get(SidebarSettingsLinkSelector).click() - cy.findByText('Project Settings').click() + cy.findByText('Project settings').click() cy.get('[data-cy="config-code"]').contains('{') }) @@ -239,7 +239,7 @@ describe('App: Settings', () => { cy.visitApp() cy.get(SidebarSettingsLinkSelector).click() - cy.findByText('Project Settings').click() + cy.findByText('Project settings').click() cy.get('[data-cy="config-legend"]').within(() => { cy.get('.bg-gray-50').contains('default') cy.get('.bg-teal-100').contains('config') @@ -267,7 +267,7 @@ describe('App: Settings', () => { }) cy.visitApp('/settings') - cy.findByText('Project Settings').click() + cy.findByText('Project settings').click() cy.findByRole('button', { name: 'Edit' }).click() cy.withRetryableCtx((ctx) => { expect((ctx.actions.file.openFile as SinonStub).lastCall.args[0]).to.eq(ctx.lifecycleManager.configFilePath) @@ -282,7 +282,7 @@ describe('App: Settings', () => { cy.visitApp() cy.get(SidebarSettingsLinkSelector).click() - cy.findByText('Project Settings').click() + cy.findByText('Project settings').click() cy.get('[data-cy="config-legend"]').within(() => { cy.get('.bg-gray-50').contains('default') cy.get('.bg-teal-100').contains('config') @@ -329,7 +329,7 @@ describe('App: Settings', () => { }) cy.visitApp('settings') - cy.contains('Device Settings').click() + cy.contains('Device settings').click() }) it('selects well known editor', () => { @@ -344,7 +344,7 @@ describe('App: Settings', () => { cy.visitApp() cy.findByTestId('sidebar-link-settings-page').click() cy.wait(200) - cy.get('[data-cy="Device Settings"]').click() + cy.get('[data-cy="Device settings"]').click() cy.get('[data-cy="custom-editor"]').should('not.exist') }) @@ -365,7 +365,7 @@ describe('App: Settings', () => { // preferred editor entered from input should have been persisted cy.findByTestId('sidebar-link-settings-page').click() cy.wait(100) - cy.get('[data-cy="Device Settings"]').click() + cy.get('[data-cy="Device settings"]').click() cy.get('[data-cy="custom-editor"]').should('have.value', '/usr/local/bin/vim') }) @@ -393,7 +393,7 @@ describe('App: Settings', () => { cy.visitApp() cy.findByTestId('sidebar-link-settings-page').click() cy.wait(200) - cy.get('[data-cy="Device Settings"]').click() + cy.get('[data-cy="Device settings"]').click() cy.get('[data-cy="custom-editor"]').should('not.exist') }) @@ -408,7 +408,7 @@ describe('App: Settings without cloud', () => { cy.visitApp() cy.get(SidebarSettingsLinkSelector).click() - cy.findByText('Dashboard Settings').click() + cy.findByText('Dashboard settings').click() cy.findByText('Project ID').should('exist') cy.withCtx((ctx, o) => { o.sinon.spy(ctx._apis.authApi, 'logIn') @@ -416,7 +416,7 @@ describe('App: Settings without cloud', () => { cy.contains('button', 'Log in to the Cypress Dashboard').click() cy.findByRole('dialog', { name: 'Log in to Cypress' }).within(() => { - cy.contains('button', 'Log In').click() + cy.contains('button', 'Log in').click() }) cy.withCtx((ctx, o) => { @@ -434,7 +434,7 @@ describe('App: Settings without cloud', () => { cy.visitApp() cy.get(SidebarSettingsLinkSelector).click() - cy.findByText('Project Settings').click() + cy.findByText('Project settings').click() cy.get('[data-cy=config-code]').within(() => { const { browsers } = Cypress.config() diff --git a/packages/app/cypress/e2e/sidebar_navigation.cy.ts b/packages/app/cypress/e2e/sidebar_navigation.cy.ts index b0d195d723b2..48d791221fb6 100644 --- a/packages/app/cypress/e2e/sidebar_navigation.cy.ts +++ b/packages/app/cypress/e2e/sidebar_navigation.cy.ts @@ -35,7 +35,7 @@ describe('Sidebar Navigation', { viewportWidth: 1280 }, () => { .should('have.attr', 'aria-label', 'Expand sidebar') cy.findByTestId('keyboard-modal-trigger') - .should('have.attr', 'aria-label', 'Keyboard Shortcuts') + .should('have.attr', 'aria-label', 'Keyboard shortcuts') cy.get('nav') .should('have.attr', 'aria-label', 'Pages') @@ -116,7 +116,7 @@ describe('Sidebar Navigation', { viewportWidth: 1280 }, () => { cy.findByTestId('sidebar').should('have.css', 'width', '64px') // assert width to ensure transition has finished cy.findByTestId('keyboard-modal-trigger').should('be.visible').click() - cy.contains('h2', 'Keyboard Shortcuts').should('be.visible') + cy.contains('h2', 'Keyboard shortcuts').should('be.visible') cy.get('li p').contains('Re-run tests').should('be.visible') cy.get('li p').contains('Stop tests').should('be.visible') cy.get('li p').contains('Toggle specs list').should('be.visible') @@ -209,7 +209,7 @@ describe('Sidebar Navigation', { viewportWidth: 1280 }, () => { it('has menu item that shows the keyboard shortcuts modal (expanded state)', () => { cy.findByTestId('keyboard-modal-trigger').should('be.visible').click() - cy.contains('h2', 'Keyboard Shortcuts').should('be.visible') + cy.contains('h2', 'Keyboard shortcuts').should('be.visible') cy.get('li p').contains('Re-run tests').should('be.visible') cy.get('li p').contains('Stop tests').should('be.visible') cy.get('li p').contains('Toggle specs list').should('be.visible') @@ -217,7 +217,7 @@ describe('Sidebar Navigation', { viewportWidth: 1280 }, () => { cy.get('li span').contains('s') cy.get('li span').contains('f') cy.get('[aria-label="Close"]').click() - cy.findByText('Keyboard Shortcuts').should('not.exist') + cy.findByText('Keyboard shortcuts').should('not.exist') }) it('has a menu item labeled "Runs" which takes you to the Runs page', () => { diff --git a/packages/app/cypress/e2e/specs.cy.ts b/packages/app/cypress/e2e/specs.cy.ts index 4838370b028a..f3ce0acb69af 100644 --- a/packages/app/cypress/e2e/specs.cy.ts +++ b/packages/app/cypress/e2e/specs.cy.ts @@ -61,7 +61,7 @@ describe('App: Specs', () => { }).should('be.visible').within(() => { cy.validateExternalLink({ name: 'Need help', href: 'https://on.cypress.io/test-type-options' }) cy.findByRole('button', { name: 'Close' }).should('be.visible').as('CloseDialogButton') - cy.get('[data-cy="file-match-indicator"]').contains('No Matches') + cy.get('[data-cy="file-match-indicator"]').contains('No matches') cy.get('[data-cy="spec-pattern"]').contains('cypress/e2e/**/*.cy.{js,jsx,ts,tsx}') }) @@ -340,12 +340,12 @@ describe('App: Specs', () => { .should('be.visible') .and('contain', defaultMessages.createSpec.page.customPatternNoSpecs.description.split('{0}')[0]) - cy.findByTestId('file-match-indicator').should('contain', 'No Matches') + cy.findByTestId('file-match-indicator').should('contain', 'No matches') cy.findByRole('button', { name: 'cypress.config.js' }) cy.findByTestId('spec-pattern').should('contain', 'src/**/*.{cy,spec}.{js,jsx}') cy.contains('button', defaultMessages.createSpec.updateSpecPattern) - cy.findByRole('button', { name: 'New Spec', exact: false }) + cy.findByRole('button', { name: 'New spec', exact: false }) }) it('opens config file in ide from SpecPattern', () => { @@ -385,7 +385,7 @@ describe('App: Specs', () => { }) it('shows new spec button to start creation workflow', () => { - cy.findByRole('button', { name: 'New Spec', exact: false }).click() + cy.findByRole('button', { name: 'New spec', exact: false }).click() cy.findByRole('dialog', { name: defaultMessages.createSpec.newSpecModalTitle }).within(() => { cy.findAllByTestId('card').eq(0) @@ -398,7 +398,7 @@ describe('App: Specs', () => { context('scaffold empty spec', () => { it('should generate empty spec', () => { - cy.findByRole('button', { name: 'New Spec', exact: false }).click() + cy.findByRole('button', { name: 'New spec', exact: false }).click() cy.findByRole('dialog', { name: defaultMessages.createSpec.newSpecModalTitle }).within(() => { cy.findAllByTestId('card').eq(0) @@ -455,9 +455,9 @@ describe('App: Specs', () => { // Timeout is increased here to allow ample time for the config change to be processed cy.contains('src/e2e/**/*.{js,jsx}', { timeout: 12000 }).should('be.visible') - cy.contains('No Specs Found').should('be.visible') + cy.contains('No specs found').should('be.visible') - cy.findByRole('button', { name: 'New Spec' }).click() + cy.findByRole('button', { name: 'New spec' }).click() cy.contains('Create new empty spec').click() cy.findAllByLabelText(defaultMessages.createSpec.e2e.importEmptySpec.inputPlaceholder) @@ -474,7 +474,7 @@ describe('App: Specs', () => { }) it('shows extension warning', () => { - cy.findByRole('button', { name: 'New Spec', exact: false }).click() + cy.findByRole('button', { name: 'New spec', exact: false }).click() cy.findByRole('dialog', { name: defaultMessages.createSpec.newSpecModalTitle }).within(() => { cy.findAllByTestId('card').eq(0) @@ -572,7 +572,7 @@ describe('App: Specs', () => { cy.findByLabelText('Enter a relative path...').clear().type('cypress/my-empty-spec.cy.js') - cy.findByRole('button', { name: 'Create Spec' }).click() + cy.findByRole('button', { name: 'Create spec' }).click() }) cy.findByRole('dialog', { @@ -598,7 +598,7 @@ describe('App: Specs', () => { cy.findByLabelText('Enter a relative path...').clear().type('cypress/my-empty-spec.cy.js') - cy.findByRole('button', { name: 'Create Spec' }).click() + cy.findByRole('button', { name: 'Create spec' }).click() }) cy.findByRole('dialog', { name: defaultMessages.createSpec.successPage.header }).within(() => { @@ -618,7 +618,7 @@ describe('App: Specs', () => { cy.findByLabelText('Enter a relative path...').clear().type('cypress/my-empty-spec.cy.js') - cy.findByRole('button', { name: 'Create Spec' }).click() + cy.findByRole('button', { name: 'Create spec' }).click() }) cy.findByRole('dialog', { name: defaultMessages.createSpec.successPage.header }).within(() => { @@ -674,12 +674,12 @@ describe('App: Specs', () => { .should('be.visible') .and('contain', defaultMessages.createSpec.page.customPatternNoSpecs.description.split('{0}')[0]) - cy.findByTestId('file-match-indicator').should('contain', 'No Matches') + cy.findByTestId('file-match-indicator').should('contain', 'No matches') cy.findByRole('button', { name: 'cypress.config.js' }) cy.findByTestId('spec-pattern').should('contain', 'src/specs-folder/*.cy.{js,jsx}') cy.contains('button', defaultMessages.createSpec.updateSpecPattern) - cy.findByRole('button', { name: 'New Spec', exact: false }) + cy.findByRole('button', { name: 'New spec', exact: false }) }) it('opens config file in ide from SpecPattern', () => { @@ -707,13 +707,13 @@ describe('App: Specs', () => { }) it('shows new spec button to start creation workflow', () => { - cy.findByRole('button', { name: 'New Spec', exact: false }).click() + cy.findByRole('button', { name: 'New spec', exact: false }).click() cy.findByRole('dialog', { name: 'Enter the path for your new spec' }).should('be.visible') }) it('shows create first spec page with create empty option and goes back if it is cancel', () => { - cy.findByRole('button', { name: 'New Spec', exact: false }).click() + cy.findByRole('button', { name: 'New spec', exact: false }).click() cy.contains('Cancel').click() @@ -734,16 +734,16 @@ describe('App: Specs', () => { // Timeout is increased here to allow ample time for the config change to be processed cy.contains('src/specs-folder/*.{js,jsx}', { timeout: 12000 }).should('be.visible') - cy.contains('No Specs Found').should('be.visible') + cy.contains('No specs found').should('be.visible') - cy.findByRole('button', { name: 'New Spec' }).click() + cy.findByRole('button', { name: 'New spec' }).click() cy.findByRole('dialog', { name: 'Enter the path for your new spec', }).within(() => { cy.findByLabelText('Enter a relative path...').invoke('val').should('eq', getPathForPlatform('src/specs-folder/ComponentName.js')) - cy.findByRole('button', { name: 'Create Spec' }).click() + cy.findByRole('button', { name: 'Create spec' }).click() }) cy.findByRole('dialog', { @@ -868,7 +868,7 @@ describe('App: Specs', () => { } }, { specs }) - cy.contains('20 Matches') + cy.contains('20 matches') cy.withRetryableCtx((ctx, o) => { // setSpecs is debounced, the number of calls should be less than the number of files removed diff --git a/packages/app/cypress/e2e/specs_list_component.cy.ts b/packages/app/cypress/e2e/specs_list_component.cy.ts index 640704b06c2f..de3f9b3163cd 100644 --- a/packages/app/cypress/e2e/specs_list_component.cy.ts +++ b/packages/app/cypress/e2e/specs_list_component.cy.ts @@ -14,7 +14,7 @@ describe('App: Spec List (Component)', () => { cy.get('[data-cy="spec-pattern-modal"]').should('be.visible') cy.get('[data-cy="spec-pattern"]').contains('cypress/component-tests/*.spec.js') - cy.contains('button', 'Update Spec Pattern').click() + cy.contains('button', 'Update spec pattern').click() cy.get('[data-cy="choose-editor-modal"]').should('be.visible').within(() => { cy.get('[aria-label="Close"]').click() }) @@ -31,7 +31,7 @@ describe('App: Spec List (Component)', () => { cy.get('[data-selected-spec="false"]').should('contain', 'foo') }) - it('opens the "Create a new spec" modal after clicking the "New Specs" button', () => { + it('opens the "Create a new spec" modal after clicking the "New specs" button', () => { cy.get('[data-cy="standard-modal"]').should('not.exist') cy.get('[data-cy="new-spec-button"]').click() cy.get('[data-cy="standard-modal"]').get('h2').contains('Enter the path for your new spec') diff --git a/packages/app/cypress/e2e/specs_list_e2e.cy.ts b/packages/app/cypress/e2e/specs_list_e2e.cy.ts index 52a4fac3c34a..5bfbd0f2470a 100644 --- a/packages/app/cypress/e2e/specs_list_e2e.cy.ts +++ b/packages/app/cypress/e2e/specs_list_e2e.cy.ts @@ -85,7 +85,7 @@ describe('App: Spec List (E2E)', () => { cy.findAllByTestId('spec-item').should('contain', 'dom-content.spec.js') }) - it('opens the "Create a new spec" modal after clicking the "New Specs" button', () => { + it('opens the "Create a new spec" modal after clicking the "New specs" button', () => { cy.findByTestId('standard-modal').should('not.exist') cy.findByTestId('new-spec-button').click() cy.findByTestId('standard-modal').get('h2').contains('Create a new spec') @@ -139,12 +139,12 @@ describe('App: Spec List (E2E)', () => { describe('typing the filter', function () { beforeEach(() => { - cy.findByLabelText('Search Specs').as('searchField') + cy.findByLabelText('Search specs').as('searchField') }) it('displays only matching spec', function () { cy.get('button') - .contains('23 Matches') + .contains('23 matches') .should('not.contain.text', 'of') clearSearchAndType('content') @@ -152,13 +152,13 @@ describe('App: Spec List (E2E)', () => { .should('have.length', 2) .and('contain', 'dom-content.spec.js') - cy.get('button').contains('2 of 23 Matches') + cy.get('button').contains('2 of 23 matches') - cy.findByLabelText('Search Specs').clear().type('asdf') + cy.findByLabelText('Search specs').clear().type('asdf') cy.findAllByTestId('spec-item') .should('have.length', 0) - cy.get('button').contains('0 of 23 Matches') + cy.get('button').contains('0 of 23 matches') }) it('only shows matching folders', () => { @@ -206,10 +206,10 @@ describe('App: Spec List (E2E)', () => { it('clears the filter on search bar clear button click', function () { clearSearchAndType('123') cy.findByLabelText('Clear search field').click() - cy.findByLabelText('Search Specs') + cy.findByLabelText('Search specs') .should('have.value', '') - cy.get('button').contains('23 Matches') + cy.get('button').contains('23 matches') }) it('clears the filter if the user presses ESC key', function () { @@ -218,7 +218,7 @@ describe('App: Spec List (E2E)', () => { cy.get('@searchField').should('have.value', '') - cy.get('button').contains('23 Matches') + cy.get('button').contains('23 matches') }) it('shows empty message if no results', function () { @@ -231,10 +231,10 @@ describe('App: Spec List (E2E)', () => { it('clears and focuses the filter field when clear search is clicked', function () { clearSearchAndType('asdf') - cy.findByText('Clear Search').click() + cy.findByText('Clear search').click() cy.focused().should('have.id', 'spec-filter') - cy.get('button').contains('23 Matches') + cy.get('button').contains('23 matches') }) it('normalizes directory path separators for Windows', function () { @@ -274,7 +274,7 @@ describe('App: Spec List (E2E)', () => { launchApp(targetSpecFile) - cy.findByLabelText('Search Specs').should('have.value', targetSpecFile) + cy.findByLabelText('Search specs').should('have.value', targetSpecFile) }) }) }) diff --git a/packages/app/cypress/e2e/specs_list_latest_runs.cy.ts b/packages/app/cypress/e2e/specs_list_latest_runs.cy.ts index 4ea622f1842a..172abe75932c 100644 --- a/packages/app/cypress/e2e/specs_list_latest_runs.cy.ts +++ b/packages/app/cypress/e2e/specs_list_latest_runs.cy.ts @@ -208,7 +208,7 @@ describe('App/Cloud Integration - Latest runs and Average duration', { viewportW .click() cy.findByRole('dialog', { name: 'Log in to Cypress' }).within(() => { - cy.get('button').contains('Log In') + cy.get('button').contains('Log in') cy.get('[aria-label="Close"]').click() }) @@ -222,7 +222,7 @@ describe('App/Cloud Integration - Latest runs and Average duration', { viewportW .click() cy.findByRole('dialog', { name: 'Log in to Cypress' }).within(() => { - cy.get('button').contains('Log In') + cy.get('button').contains('Log in') cy.get('[aria-label="Close"]').click() }) @@ -405,7 +405,7 @@ describe('App/Cloud Integration - Latest runs and Average duration', { viewportW .should('have.attr', 'aria-expanded', 'false') .then((dir) => { // Perform a search/filter operation - cy.findByLabelText('Search Specs').type(dir.text()[0]) + cy.findByLabelText('Search specs').type(dir.text()[0]) }) // Previously-collapsed directory should automatically expand @@ -422,7 +422,7 @@ describe('App/Cloud Integration - Latest runs and Average duration', { viewportW // Move to Settings page and wait for render cy.get('a[href="#/settings"]').click() cy.location('hash').should('include', '/settings') - cy.findByText('Project Settings').should('be.visible') + cy.findByText('Project settings').should('be.visible') // Move back to Specs page and wait for render cy.get('a[href="#/specs"]').click() diff --git a/packages/app/cypress/e2e/subscriptions/authChange-subscription.cy.ts b/packages/app/cypress/e2e/subscriptions/authChange-subscription.cy.ts index acbfa8274f87..568b738f8d59 100644 --- a/packages/app/cypress/e2e/subscriptions/authChange-subscription.cy.ts +++ b/packages/app/cypress/e2e/subscriptions/authChange-subscription.cy.ts @@ -30,7 +30,7 @@ describe('authChange subscription', () => { }) it('responds to authChange subscription for login', () => { - cy.contains('Log In') + cy.contains('Log in') cy.wait(500) cy.withCtx(async (ctx) => { await ctx.actions.auth.login('testing', 'testing') @@ -48,7 +48,7 @@ describe('authChange subscription', () => { await ctx.actions.auth.logout() }) - cy.contains('Log In') + cy.contains('Log in') }) }) @@ -59,7 +59,7 @@ describe('authChange subscription', () => { }) it('responds to authChange subscription for login', () => { - cy.contains('Log In') + cy.contains('Log in') cy.wait(500) cy.withCtx(async (ctx) => { await ctx.actions.auth.login('testing', 'testing') @@ -77,7 +77,7 @@ describe('authChange subscription', () => { await ctx.actions.auth.logout() }) - cy.contains('Log In') + cy.contains('Log in') }) }) @@ -87,7 +87,7 @@ describe('authChange subscription', () => { }) it('responds to authChange subscription for login', () => { - cy.contains('Log In') + cy.contains('Log in') cy.wait(500) cy.withCtx(async (ctx) => { await ctx.actions.auth.login('testing', 'testing') @@ -105,7 +105,7 @@ describe('authChange subscription', () => { await ctx.actions.auth.logout() }) - cy.contains('Log In') + cy.contains('Log in') }) }) }) diff --git a/packages/app/cypress/e2e/subscriptions/configChange-subscription.cy.ts b/packages/app/cypress/e2e/subscriptions/configChange-subscription.cy.ts index e9b895362a1d..2a26713d8798 100644 --- a/packages/app/cypress/e2e/subscriptions/configChange-subscription.cy.ts +++ b/packages/app/cypress/e2e/subscriptions/configChange-subscription.cy.ts @@ -27,7 +27,7 @@ describe('configChange subscription', () => { describe('on config page', () => { it('responds to configChange event when viewport is changed', () => { cy.contains('a', 'Settings').click() - cy.get('[data-cy="collapsible-header"]').contains('Project Settings').click() + cy.get('[data-cy="collapsible-header"]').contains('Project settings').click() cy.contains(`projectId: 'abc123'`) updateProjectIdInCypressConfig('foo456') cy.contains(`projectId: 'foo456'`) diff --git a/packages/app/cypress/e2e/subscriptions/specChange-subscription.cy.ts b/packages/app/cypress/e2e/subscriptions/specChange-subscription.cy.ts index 4d344397ca03..2a0318bc6368 100644 --- a/packages/app/cypress/e2e/subscriptions/specChange-subscription.cy.ts +++ b/packages/app/cypress/e2e/subscriptions/specChange-subscription.cy.ts @@ -324,14 +324,14 @@ e2e: { cy.get('[data-cy="spec-pattern"]').contains('cypress/e2e/**/*.spec.{js,ts}') cy.get('[data-cy="file-match-indicator"]') - .should('contain', '23 Matches') + .should('contain', '23 matches') cy.withCtx(async (ctx, o) => { await ctx.actions.file.writeFileInProject(o.path, '') }, { path: getPathForPlatform('cypress/e2e/new-file.spec.js') }) cy.get('[data-cy="file-match-indicator"]') - .should('contain', '24 Matches') + .should('contain', '24 matches') }) it('responds to specChange event for a removed file', () => { @@ -341,14 +341,14 @@ e2e: { cy.get('[data-cy="spec-pattern"]').contains('cypress/e2e/**/*.spec.{js,ts}') cy.get('[data-cy="file-match-indicator"]') - .should('contain', '23 Matches') + .should('contain', '23 matches') cy.withCtx(async (ctx, o) => { await ctx.actions.file.removeFileInProject(o.path) }, { path: getPathForPlatform('cypress/e2e/dom-list.spec.js') }) cy.get('[data-cy="file-match-indicator"]') - .should('contain', '22 Matches') + .should('contain', '22 matches') }) it('handles removing the last file', () => { @@ -387,7 +387,7 @@ e2e: { }) cy.get('[data-cy="file-match-indicator"]') - .should('contain', '1 Match') + .should('contain', '1 match') cy.withCtx(async (ctx, o) => { await ctx.actions.file.removeFileInProject(o.path) @@ -404,7 +404,7 @@ e2e: { cy.get('[data-cy="spec-pattern"]').contains('cypress/e2e/**/*.spec.{js,ts}') cy.get('[data-cy="file-match-indicator"]') - .should('contain', '23 Matches') + .should('contain', '23 matches') cy.withCtx(async (ctx) => { await ctx.actions.file.writeFileInProject('cypress.config.js', @@ -428,7 +428,7 @@ e2e: { }) cy.get('[data-cy="file-match-indicator"]', { timeout: 7500 }) - .should('contain', '2 Matches') + .should('contain', '2 matches') }) }) }) diff --git a/packages/app/cypress/e2e/top-nav.cy.ts b/packages/app/cypress/e2e/top-nav.cy.ts index d3a05f6515ab..330e5f0796b1 100644 --- a/packages/app/cypress/e2e/top-nav.cy.ts +++ b/packages/app/cypress/e2e/top-nav.cy.ts @@ -211,7 +211,7 @@ describe('App Top Nav Workflows', () => { cy.findByRole('dialog', { name: 'Upgrade to Cypress 10.1.0' }).as('upgradeModal').within(() => { cy.contains('You are currently running Version 10.0.0 of Cypress').should('be.visible') - cy.contains('npm install -D cypress@10.1.0').should('be.visible') + cy.findByDisplayValue('npm install -D cypress@10.1.0').should('be.visible') cy.findByRole('button', { name: 'Close' }).click() }) @@ -261,7 +261,7 @@ describe('App Top Nav Workflows', () => { it('shows popover with additional doc links', () => { cy.get('@docsButton').click().should('have.attr', 'aria-expanded', 'true') - cy.findByRole('heading', { name: 'Getting Started', level: 2 }) + cy.findByRole('heading', { name: 'Getting started', level: 2 }) cy.findByRole('heading', { name: 'References', level: 2 }) cy.findByRole('heading', { name: 'Run in CI/CD', level: 2 }) @@ -275,11 +275,11 @@ describe('App Top Nav Workflows', () => { href: 'https://on.cypress.io/testing-your-app?utm_medium=Docs+Menu&utm_content=Testing+Your+App&utm_source=Binary%3A+App', }, { - name: 'Organizing Tests', + name: 'Organizing tests', href: 'https://on.cypress.io/writing-and-organizing-tests?utm_medium=Docs+Menu&utm_content=Organizing+Tests&utm_source=Binary%3A+App', }, { - name: 'Best Practices', + name: 'Best practices', href: 'https://on.cypress.io/best-practices?utm_medium=Docs+Menu&utm_content=Best+Practices&utm_source=Binary%3A+App', }, { @@ -331,7 +331,7 @@ describe('App Top Nav Workflows', () => { cy.loginUser() cy.visitApp() - cy.findByTestId('app-header-bar').findByRole('button', { name: 'Profile and Log Out', expanded: false }).as('logInButton') + cy.findByTestId('app-header-bar').findByRole('button', { name: 'Profile and logout', expanded: false }).as('logInButton') }) it('shows user in top nav when logged in', () => { @@ -357,9 +357,9 @@ describe('App Top Nav Workflows', () => { }) }) - cy.findByRole('button', { name: 'Log Out' }).click() + cy.findByRole('button', { name: 'Log out' }).click() - cy.findByTestId('app-header-bar').findByText('Log In').should('be.visible') + cy.findByTestId('app-header-bar').findByText('Log in').should('be.visible') }) it('logouts user if cloud request returns unauthorized', () => { @@ -388,7 +388,7 @@ describe('App Top Nav Workflows', () => { cy.findByTestId('app-header-bar').within(() => { cy.findByTestId('user-avatar-title').should('not.exist') - cy.findByRole('button', { name: 'Log In' }).click() + cy.findByRole('button', { name: 'Log in' }).click() }) }) }) @@ -426,18 +426,18 @@ describe('App Top Nav Workflows', () => { function logIn ({ expectedNextStepText, displayName }) { cy.findByTestId('app-header-bar').within(() => { cy.findByTestId('user-avatar-title').should('not.exist') - cy.findByRole('button', { name: 'Log In' }).click() + cy.findByRole('button', { name: 'Log in' }).click() }) cy.findByRole('dialog', { name: 'Log in to Cypress' }).as('logInModal').within(() => { - cy.findByRole('button', { name: 'Log In' }).click() + cy.findByRole('button', { name: 'Log in' }).click() - // The Log In button transitions through a few states as the browser launch lifecycle completes - cy.findByRole('button', { name: 'Opening Browser' }).should('be.visible').and('be.disabled') + // The Log in button transitions through a few states as the browser launch lifecycle completes + cy.findByRole('button', { name: 'Opening browser' }).should('be.visible').and('be.disabled') cy.findByRole('button', { name: 'Waiting for you to log in' }).should('be.visible').and('be.disabled') }) - cy.findByRole('dialog', { name: 'Login Successful' }).within(() => { + cy.findByRole('dialog', { name: 'Login successful' }).within(() => { cy.findByText('You are now logged in as', { exact: false }).should('be.visible') cy.validateExternalLink({ name: displayName, href: 'https://on.cypress.io/dashboard/profile' }) @@ -509,11 +509,11 @@ describe('App Top Nav Workflows', () => { cy.findByTestId('app-header-bar').within(() => { cy.findByTestId('user-avatar-title').should('not.exist') - cy.findByRole('button', { name: 'Log In' }).click() + cy.findByRole('button', { name: 'Log in' }).click() }) cy.findByRole('dialog', { name: 'Log in to Cypress' }).within(() => { - cy.findByRole('button', { name: 'Log In' }).click() + cy.findByRole('button', { name: 'Log in' }).click() cy.contains('http://127.0.0.1:0000/redirect-to-auth').should('be.visible') cy.contains(loginText.titleBrowserError).should('be.visible') @@ -541,11 +541,11 @@ describe('App Top Nav Workflows', () => { cy.findByTestId('app-header-bar').within(() => { cy.findByTestId('user-avatar-title').should('not.exist') - cy.findByRole('button', { name: 'Log In' }).click() + cy.findByRole('button', { name: 'Log in' }).click() }) cy.findByRole('dialog', { name: 'Log in to Cypress' }).within(() => { - cy.findByRole('button', { name: 'Log In' }).click() + cy.findByRole('button', { name: 'Log in' }).click() cy.contains(loginText.titleFailed).should('be.visible') cy.contains(loginText.bodyError).should('be.visible') @@ -591,11 +591,11 @@ describe('App Top Nav Workflows', () => { cy.findByTestId('app-header-bar').within(() => { cy.findByTestId('user-avatar-title').should('not.exist') - cy.findByRole('button', { name: 'Log In' }).as('loginButton').click() + cy.findByRole('button', { name: 'Log in' }).as('loginButton').click() }) cy.findByRole('dialog', { name: 'Log in to Cypress' }).within(() => { - cy.findByRole('button', { name: 'Log In' }).click() + cy.findByRole('button', { name: 'Log in' }).click() cy.contains(loginText.titleFailed).should('be.visible') cy.contains(loginText.bodyError).should('be.visible') @@ -628,11 +628,11 @@ describe('App Top Nav Workflows', () => { cy.findByTestId('app-header-bar').within(() => { cy.findByTestId('user-avatar-title').should('not.exist') - cy.findByRole('button', { name: 'Log In' }).as('loginButton').click() + cy.findByRole('button', { name: 'Log in' }).as('loginButton').click() }) cy.findByRole('dialog', { name: 'Log in to Cypress' }).within(() => { - cy.findByRole('button', { name: 'Log In' }).click() + cy.findByRole('button', { name: 'Log in' }).click() cy.contains(loginText.titleFailed).should('be.visible') cy.contains(loginText.bodyError).should('be.visible') cy.contains('An unexpected error occurred').should('be.visible') diff --git a/packages/app/src/components/FileMatch.cy.tsx b/packages/app/src/components/FileMatch.cy.tsx index 8ec23e763b05..fc9cd872d48e 100644 --- a/packages/app/src/components/FileMatch.cy.tsx +++ b/packages/app/src/components/FileMatch.cy.tsx @@ -158,27 +158,27 @@ describe('', { viewportWidth: 600, viewportHeight: 300 }, () => { const matchesData: Record = { all: [ { matches: { found: 10, total } }, - '10 Matches', + '10 matches', ], 'ignores numerator when file pattern isn\'t searched': [ { matches: { found: 9, total } }, - '10 Matches', + '10 matches', ], 'shows numerator when file pattern is searched': [ { matches: { found: 9, total }, pattern: 'A Pattern', extensionPattern: '*.tsx' }, - '9 of 10 Matches', + '9 of 10 matches', ], one: [ { matches: { found: 1, total }, pattern: 'A Pattern', extensionPattern: '*.tsx' }, - '1 of 10 Matches', + '1 of 10 matches', ], 'one without a pattern': [ { matches: { found: 1, total } }, - '1 Match', + '1 match', ], 'no matches': [ { matches: { found: 0, total: 0 } }, - 'No Matches', + 'No matches', ], } diff --git a/packages/app/src/components/SpecPatterns.cy.tsx b/packages/app/src/components/SpecPatterns.cy.tsx index c7a4e0b526e0..399ad11db717 100644 --- a/packages/app/src/components/SpecPatterns.cy.tsx +++ b/packages/app/src/components/SpecPatterns.cy.tsx @@ -8,7 +8,7 @@ describe('', () => { }) cy.get('[data-cy="spec-pattern"]').contains('cypress/e2e/**/*.cy.{js,jsx,ts,tsx}') - cy.get('[data-cy="file-match-indicator"]').contains('50 Matches') + cy.get('[data-cy="file-match-indicator"]').contains('50 matches') cy.percySnapshot() }) @@ -27,7 +27,7 @@ describe('', () => { }) cy.get('[data-cy="spec-pattern"]').contains('**/*.cy.{js,jsx,ts,tsx}') - cy.get('[data-cy="file-match-indicator"]').contains('50 Matches') + cy.get('[data-cy="file-match-indicator"]').contains('50 matches') }) it('renders component spec pattern should not show matches verbiage', () => { @@ -47,7 +47,7 @@ describe('', () => { cy.get('[data-cy="file-match-indicator"]').should('contain', 'specPattern') }) - it('displays `No Matches` when specs are empty', () => { + it('displays `No matches` when specs are empty', () => { cy.mountFragment(SpecPatternsFragmentDoc, { onResult: (res) => { if (!res) { @@ -60,7 +60,7 @@ describe('', () => { render: (gql) =>
, }) - cy.get('[data-cy="file-match-indicator"]').contains('No Matches') + cy.get('[data-cy="file-match-indicator"]').contains('No matches') }) it('displays `1 Match` when specs has 1 element', () => { @@ -76,6 +76,6 @@ describe('', () => { render: (gql) =>
, }) - cy.get('[data-cy="file-match-indicator"]').contains('1 Match') + cy.get('[data-cy="file-match-indicator"]').contains('1 match') }) }) diff --git a/packages/app/src/runner/SnapshotControls.cy.tsx b/packages/app/src/runner/SnapshotControls.cy.tsx index 126d656ade43..86dd662a76e9 100644 --- a/packages/app/src/runner/SnapshotControls.cy.tsx +++ b/packages/app/src/runner/SnapshotControls.cy.tsx @@ -100,7 +100,7 @@ describe('SnapshotControls', { viewportHeight: 200, viewportWidth: 500 }, () => snapshotStore.setTestsRunningError() cy.get('body') - .findByText('Cannot show Snapshot while tests are running') + .findByText('Cannot show snapshot while tests are running') .should('be.visible') }) diff --git a/packages/app/src/runner/selector-playground/SelectorPlayground.cy.tsx b/packages/app/src/runner/selector-playground/SelectorPlayground.cy.tsx index 0770461c3eb5..571eb275fa19 100644 --- a/packages/app/src/runner/selector-playground/SelectorPlayground.cy.tsx +++ b/packages/app/src/runner/selector-playground/SelectorPlayground.cy.tsx @@ -59,7 +59,7 @@ describe('SelectorPlayground', () => { cy.spy(autIframe, 'toggleSelectorHighlight') expect(selectorPlaygroundStore.method).to.eq('get') - cy.get('[aria-label="Selector Methods"]').click() + cy.get('[aria-label="Selector methods"]').click() cy.findByRole('menuitem', { name: 'cy.contains' }).click().then(() => { expect(selectorPlaygroundStore.method).to.eq('contains') expect(autIframe.toggleSelectorHighlight).to.have.been.called @@ -74,15 +74,15 @@ describe('SelectorPlayground', () => { selectorPlaygroundStore.setNumElements(0) mountSelectorPlayground() - cy.get('[data-cy="playground-num-elements"]').contains('No Matches') + cy.get('[data-cy="playground-num-elements"]').contains('No matches') cy.then(() => selectorPlaygroundStore.setNumElements(1)) - cy.get('[data-cy="playground-num-elements"]').contains('1 Match') + cy.get('[data-cy="playground-num-elements"]').contains('1 match') cy.then(() => selectorPlaygroundStore.setNumElements(10)) - cy.get('[data-cy="playground-num-elements"]').contains('10 Matches') + cy.get('[data-cy="playground-num-elements"]').contains('10 matches') cy.percySnapshot() diff --git a/packages/app/src/runs/CloudConnectButton.cy.tsx b/packages/app/src/runs/CloudConnectButton.cy.tsx index 100c229de39d..09fee431c18c 100644 --- a/packages/app/src/runs/CloudConnectButton.cy.tsx +++ b/packages/app/src/runs/CloudConnectButton.cy.tsx @@ -75,6 +75,6 @@ describe('', () => { cy.contains('button', 'Connect your project').click() cy.get('[role="dialog"]').should('be.visible') - cy.get('[role="dialog"] h2').should('contain', 'Connect Project') + cy.get('[role="dialog"] h2').should('contain', 'Connect project') }) }) diff --git a/packages/app/src/runs/RunsEmpty.cy.tsx b/packages/app/src/runs/RunsEmpty.cy.tsx index 31074bd2aa4b..aa5e83c727a3 100644 --- a/packages/app/src/runs/RunsEmpty.cy.tsx +++ b/packages/app/src/runs/RunsEmpty.cy.tsx @@ -21,6 +21,6 @@ describe('RunsEmpty', () => { } as any cy.contains(defaultMessages.specPage.banners.record.title).should('be.visible') - cy.contains('npx cypress run --component --record --key abcd-efg-1234').should('be.visible') + cy.findByDisplayValue('npx cypress run --component --record --key abcd-efg-1234').should('be.visible') }) }) diff --git a/packages/app/src/runs/RunsEmpty.vue b/packages/app/src/runs/RunsEmpty.vue index e9cc4e94c000..0a8654187a2d 100644 --- a/packages/app/src/runs/RunsEmpty.vue +++ b/packages/app/src/runs/RunsEmpty.vue @@ -10,7 +10,7 @@

{{ t("runs.empty.description") }}

- + diff --git a/packages/app/src/runs/modals/SelectCloudProjectModal.vue b/packages/app/src/runs/modals/SelectCloudProjectModal.vue index d7dd728c00e6..64b9c382529c 100644 --- a/packages/app/src/runs/modals/SelectCloudProjectModal.vue +++ b/packages/app/src/runs/modals/SelectCloudProjectModal.vue @@ -160,6 +160,7 @@ size="lg" :prefix-icon="newProject ? CreateIcon : ConnectIcon" prefix-icon-class="icon-dark-white" + data-cy="connect-project" @click="createOrConnectProject" > {{ newProject diff --git a/packages/app/src/settings/SettingsContainer.cy.tsx b/packages/app/src/settings/SettingsContainer.cy.tsx index 76a766cef461..e29285f95dfb 100644 --- a/packages/app/src/settings/SettingsContainer.cy.tsx +++ b/packages/app/src/settings/SettingsContainer.cy.tsx @@ -15,36 +15,36 @@ describe('', { viewportHeight: 800, viewportWidth: 900 }, ( }) it('expands and collapses project settings', () => { - cy.contains('Project Settings').click() + cy.contains('Project settings').click() cy.findByText(defaultMessages.settingsPage.experiments.title).scrollIntoView().should('be.visible') cy.findByText(defaultMessages.settingsPage.specPattern.title).scrollIntoView().should('be.visible') cy.findByText(defaultMessages.settingsPage.config.title).scrollIntoView().should('be.visible') cy.percySnapshot() - cy.findByText('Project Settings').click() + cy.findByText('Project settings').click() cy.findByText(defaultMessages.settingsPage.experiments.title).should('not.exist') }) it('expands and collapses device settings', () => { - cy.contains('Device Settings').click() + cy.contains('Device settings').click() cy.findByText(defaultMessages.settingsPage.editor.title).should('be.visible') cy.findByText(defaultMessages.settingsPage.proxy.title).should('be.visible') cy.findByText(defaultMessages.settingsPage.testingPreferences.title).should('be.visible') cy.percySnapshot() - cy.findByText('Device Settings').click() + cy.findByText('Device settings').click() cy.findByText(defaultMessages.settingsPage.editor.title).should('not.exist') }) it('expands and collapses cloud settings', () => { - cy.contains('Dashboard Settings').click() + cy.contains('Dashboard settings').click() cy.findByText(defaultMessages.settingsPage.projectId.title).scrollIntoView().should('be.visible') cy.percySnapshot() - cy.findByText('Dashboard Settings').click() + cy.findByText('Dashboard settings').click() cy.findByText(defaultMessages.settingsPage.projectId.title).should('not.exist') }) diff --git a/packages/app/src/settings/device/ProxySettings.cy.tsx b/packages/app/src/settings/device/ProxySettings.cy.tsx index d050d5c5ac13..68a52ea5396c 100644 --- a/packages/app/src/settings/device/ProxySettings.cy.tsx +++ b/packages/app/src/settings/device/ProxySettings.cy.tsx @@ -15,10 +15,10 @@ describe('', { render: (gql) =>
, }) - cy.findByText('Proxy Bypass List') + cy.findByText('Proxy bypass list') .get('[data-testid=bypass-list]').should('have.text', 'proxy-bypass') - cy.findByText('Proxy Server') + cy.findByText('Proxy server') .get('[data-testid=proxy-server]').should('have.text', 'proxy-server') cy.percySnapshot() @@ -40,10 +40,10 @@ describe('', { render: (gql) =>
, }) - cy.findByText('Proxy Bypass List') + cy.findByText('Proxy bypass list') .get('[data-testid=bypass-list]').should('have.text', '-') - cy.findByText('Proxy Server') + cy.findByText('Proxy server') .get('[data-testid=proxy-server]').should('have.text', '-') }) }) diff --git a/packages/app/src/settings/project/CloudSettings.cy.tsx b/packages/app/src/settings/project/CloudSettings.cy.tsx index 8abc31705e31..e04b9a69704a 100644 --- a/packages/app/src/settings/project/CloudSettings.cy.tsx +++ b/packages/app/src/settings/project/CloudSettings.cy.tsx @@ -3,7 +3,7 @@ import { CloudSettingsFragmentDoc } from '../../generated/graphql-test' import CloudSettings from './CloudSettings.vue' describe('', () => { - it('displays the project Id and record key sections', () => { + it('displays the project Id and Record Key sections', () => { cy.mountFragment(CloudSettingsFragmentDoc, { render: (gqlVal) => { @@ -45,7 +45,7 @@ describe('', () => { cy.percySnapshot() }) - it('hides record key when not present', () => { + it('hides Record Key when not present', () => { cy.mountFragment(CloudSettingsFragmentDoc, { onResult (ctx) { if (ctx.currentProject?.cloudProject?.__typename === 'CloudProject') { diff --git a/packages/app/src/settings/project/RecordKey.cy.tsx b/packages/app/src/settings/project/RecordKey.cy.tsx index 3bc2c5313c12..d1189bd0ddf3 100644 --- a/packages/app/src/settings/project/RecordKey.cy.tsx +++ b/packages/app/src/settings/project/RecordKey.cy.tsx @@ -19,12 +19,12 @@ describe('', () => { }) }) - it('renders the record key view with the correct title', () => { - cy.findByText('Record Key') + it('renders the Record Key view with the correct title', () => { + cy.findByText('Record key') }) it(`has an input that's hidden by default`, () => { - cy.get('code').as('Record Key Input') + cy.get('code').as('Record key input') .should('be.visible') .contains('code', key).should('not.exist') .get('[aria-label="Record Key Visibility Toggle"]').as('Password Toggle') diff --git a/packages/app/src/settings/project/SpecPatterns.cy.tsx b/packages/app/src/settings/project/SpecPatterns.cy.tsx index 1144b0cd65af..09e6d3e281c7 100644 --- a/packages/app/src/settings/project/SpecPatterns.cy.tsx +++ b/packages/app/src/settings/project/SpecPatterns.cy.tsx @@ -15,7 +15,7 @@ describe('', () => { cy.contains('h2', defaultMessages.settingsPage.specPattern.title) cy.contains('code', 'specPattern') cy.contains('p', defaultMessages.settingsPage.specPattern.description.replace('{0}', 'Learn more')) - cy.get('[data-cy="file-match-indicator"]').contains('50 Matches') + cy.get('[data-cy="file-match-indicator"]').contains('50 matches') cy.get('[data-cy="spec-pattern"]').contains('cypress/e2e/**/*.cy.{js,jsx,ts,tsx}') cy.get('[data-cy="external"]').should('have.attr', 'href').and('eq', 'https://on.cypress.io/test-type-options') diff --git a/packages/app/src/specs/InlineSpecList.cy.tsx b/packages/app/src/specs/InlineSpecList.cy.tsx index 7d89ce3b4161..1d721a30db61 100644 --- a/packages/app/src/specs/InlineSpecList.cy.tsx +++ b/packages/app/src/specs/InlineSpecList.cy.tsx @@ -63,7 +63,7 @@ describe('InlineSpecList', () => { it('should open CreateSpec modal', () => { mountInlineSpecList() - const newSpecSelector = `[aria-label="New Spec"]` + const newSpecSelector = `[aria-label="New spec"]` cy.get(newSpecSelector).click() cy.contains(defaultMessages.createSpec.newSpecModalTitle).should('be.visible') diff --git a/packages/app/src/specs/InlineSpecListHeader.cy.tsx b/packages/app/src/specs/InlineSpecListHeader.cy.tsx index 46268e91476c..d4949f2ad57a 100644 --- a/packages/app/src/specs/InlineSpecListHeader.cy.tsx +++ b/packages/app/src/specs/InlineSpecListHeader.cy.tsx @@ -57,13 +57,13 @@ describe('InlineSpecListHeader', () => { it('exposes the result count correctly to assistive tech', () => { mountWithResultCount(0) - cy.contains('No Matches') + cy.contains('No matches') .should('have.class', 'sr-only') .and('have.attr', 'aria-live', 'polite') mountWithResultCount(1) - cy.contains('1 Match').should('have.class', 'sr-only') + cy.contains('1 match').should('have.class', 'sr-only') mountWithResultCount(100) - cy.contains('100 Matches').should('have.class', 'sr-only') + cy.contains('100 matches').should('have.class', 'sr-only') }) }) diff --git a/packages/app/src/specs/SpecsList.cy.tsx b/packages/app/src/specs/SpecsList.cy.tsx index 4ea7ccceb132..b3576437fdf6 100644 --- a/packages/app/src/specs/SpecsList.cy.tsx +++ b/packages/app/src/specs/SpecsList.cy.tsx @@ -215,17 +215,17 @@ describe('', { keystrokeDelay: 0 }, () => { cy.contains('button', defaultMessages.createSpec.viewSpecPatternButton) .as('resultsCount') - .should('contain.text', '0 of 50 Matches') + .should('contain.text', '0 of 50 matches') // confirm results clear correctly cy.contains('button', defaultMessages.noResults.clearSearch).click() cy.get('@resultsCount') - .should('contain.text', '50 Matches') + .should('contain.text', '50 matches') // the exact wording here can be deceptive so confirm it's not still // displaying "of", since X of 50 Matches would pass for containing "50 matches" // but would be wrong. - .should('not.contain.text', 'of 50 Matches') + .should('not.contain.text', 'of 50 matches') }) it('calls gql mutation to save updated filter', () => { diff --git a/packages/app/src/specs/SpecsListHeader.cy.tsx b/packages/app/src/specs/SpecsListHeader.cy.tsx index ce87349e66b5..478f7dedbfe8 100644 --- a/packages/app/src/specs/SpecsListHeader.cy.tsx +++ b/packages/app/src/specs/SpecsListHeader.cy.tsx @@ -92,19 +92,19 @@ describe('', { keystrokeDelay: 0 }, () => { } mountWithSpecCount(0) - cy.contains('No Matches') + cy.contains('No matches') .should('be.visible') .and('have.attr', 'aria-live', 'polite') - cy.percySnapshot('No Matches') + cy.percySnapshot('No matches') mountWithSpecCount(1) - cy.contains('1 Match').should('be.visible') + cy.contains('1 match').should('be.visible') cy.percySnapshot('Singular Match') mountWithSpecCount(100) - cy.contains('100 Matches').should('be.visible') + cy.contains('100 matches').should('be.visible') cy.percySnapshot('Plural Match') }) @@ -119,19 +119,19 @@ describe('', { keystrokeDelay: 0 }, () => { } mountWithCounts(0, 0) - cy.contains('No Matches') + cy.contains('No matches') mountWithCounts(0, 22) - cy.contains('0 of 22 Matches') + cy.contains('0 of 22 matches') mountWithCounts(0, 1) - cy.contains('0 of 1 Match').should('be.visible') + cy.contains('0 of 1 match').should('be.visible') mountWithCounts(1, 1) - cy.contains('1 of 1 Match').should('be.visible') + cy.contains('1 of 1 match').should('be.visible') mountWithCounts(5, 22) - cy.contains('5 of 22 Matches').should('be.visible') + cy.contains('5 of 22 matches').should('be.visible') cy.percySnapshot() }) diff --git a/packages/app/src/specs/banners/RecordBanner.cy.tsx b/packages/app/src/specs/banners/RecordBanner.cy.tsx index 076ed117157a..1b8510865723 100644 --- a/packages/app/src/specs/banners/RecordBanner.cy.tsx +++ b/packages/app/src/specs/banners/RecordBanner.cy.tsx @@ -24,7 +24,7 @@ describe('', () => { cy.contains(defaultMessages.specPage.banners.record.title).should('be.visible') cy.contains(defaultMessages.specPage.banners.record.content).should('be.visible') - cy.findByText('npx cypress run --component --record --key abcd-efg-1234') + cy.findByDisplayValue('npx cypress run --component --record --key abcd-efg-1234').should('be.visible') cy.percySnapshot() }) diff --git a/packages/app/src/specs/generators/FileChooser.cy.tsx b/packages/app/src/specs/generators/FileChooser.cy.tsx index 09f0c729cfd1..98f36a501b28 100644 --- a/packages/app/src/specs/generators/FileChooser.cy.tsx +++ b/packages/app/src/specs/generators/FileChooser.cy.tsx @@ -60,17 +60,17 @@ describe('', () => { describe('matches', () => { it('displays the total number of file matches', () => { cy.mount(() => ()) - .get(fileMatchIndicatorSelector).should('contain.text', `${allFiles.length } Matches`) + .get(fileMatchIndicatorSelector).should('contain.text', `${allFiles.length } matches`) }) it('handles pluralization', () => { cy.mount(() => ()) - .get(fileMatchIndicatorSelector).should('contain.text', `${1 } Match`) + .get(fileMatchIndicatorSelector).should('contain.text', `${1 } match`) }) it('handles no matches', () => { cy.mount(() => ()) - .get(fileMatchIndicatorSelector).should('contain.text', 'No Matches') + .get(fileMatchIndicatorSelector).should('contain.text', 'No matches') }) it('updates the number of files found out of the total number available', () => { @@ -86,15 +86,15 @@ describe('', () => { // Figure out how many files were actually matched and make sure // that they're out of the total files passed in cy.get(fileMatchIndicatorSelector) - .should('contain.text', `${$rows.length} of ${allFiles.length} Matches`) + .should('contain.text', `${$rows.length} of ${allFiles.length} matches`) // Get back to an empty state where all files are shown .get(filenameInputSelector).clear() - .get(fileMatchIndicatorSelector).should('contain.text', `${allFiles.length } Matches`) + .get(fileMatchIndicatorSelector).should('contain.text', `${allFiles.length } matches`) // Go to the no matches state .get(filenameInputSelector).type(nonExistentFileName, { delay: 0 }) - .get(fileMatchIndicatorSelector).should('contain.text', 'No Matches') + .get(fileMatchIndicatorSelector).should('contain.text', 'No matches') }) }) }) diff --git a/packages/config/src/options.ts b/packages/config/src/options.ts index 8173d48d92cc..94fb4383c233 100644 --- a/packages/config/src/options.ts +++ b/packages/config/src/options.ts @@ -141,6 +141,7 @@ const driverConfigOptions: Array = [ defaultValue: null, validation: validate.isStringOrArrayOfStrings, overrideLevel: 'any', + requireRestartOnChange: 'server', }, { name: 'chromeWebSecurity', defaultValue: true, diff --git a/packages/config/test/index.spec.ts b/packages/config/test/index.spec.ts index 0a6ded9fda8b..22de97ebb98e 100644 --- a/packages/config/test/index.spec.ts +++ b/packages/config/test/index.spec.ts @@ -231,4 +231,15 @@ describe('config/src/index', () => { expect(errorFn).to.have.callCount(0) }) }) + + describe('.validateNeedToRestartOnChange', () => { + it('returns the need to restart if given key has changed', () => { + const result = configUtil.validateNeedToRestartOnChange({ blockHosts: [] }, { blockHosts: ['https://example.com'] }) + + expect(result).to.eql({ + server: true, + browser: false, + }) + }) + }) }) diff --git a/packages/errors/__snapshot-html__/DASHBOARD_GRAPHQL_ERROR.html b/packages/errors/__snapshot-html__/DASHBOARD_GRAPHQL_ERROR.html index 413cee104d0c..a67930f5522b 100644 --- a/packages/errors/__snapshot-html__/DASHBOARD_GRAPHQL_ERROR.html +++ b/packages/errors/__snapshot-html__/DASHBOARD_GRAPHQL_ERROR.html @@ -34,7 +34,7 @@ -
We received an unexpected error response from the request to the Cypress dashboard:
+    
We received an unexpected error response from the request to the Cypress Dashboard:
 
 "fail whale"
 
diff --git a/packages/errors/__snapshot-html__/DASHBOARD_RECORD_KEY_NOT_VALID.html b/packages/errors/__snapshot-html__/DASHBOARD_RECORD_KEY_NOT_VALID.html
index 59ef0c222877..1583c8ae4003 100644
--- a/packages/errors/__snapshot-html__/DASHBOARD_RECORD_KEY_NOT_VALID.html
+++ b/packages/errors/__snapshot-html__/DASHBOARD_RECORD_KEY_NOT_VALID.html
@@ -38,7 +38,7 @@
 
 It may have been recently revoked by you or another user.
 
-Please log into the Dashboard to see the valid record keys.
+Please log into the Dashboard to see the valid Record Keys.
 
 https://on.cypress.io/dashboard/projects/project-id-123
 
\ No newline at end of file diff --git a/packages/errors/src/errors.ts b/packages/errors/src/errors.ts index 456915870395..096043e12a2a 100644 --- a/packages/errors/src/errors.ts +++ b/packages/errors/src/errors.ts @@ -483,7 +483,7 @@ export const AllCypressErrors = { It may have been recently revoked by you or another user. - Please log into the Dashboard to see the valid record keys. + Please log into the Dashboard to see the valid Record Keys. https://on.cypress.io/dashboard/projects/${fmt.off(projectId)}` }, @@ -1425,7 +1425,7 @@ export const AllCypressErrors = { DASHBOARD_GRAPHQL_ERROR: (err: Error) => { return errTemplate` - We received an unexpected error response from the request to the Cypress dashboard: + We received an unexpected error response from the request to the Cypress Dashboard: ${fmt.stringify(err.message)} ` diff --git a/packages/frontend-shared/src/components/TerminalPrompt.cy.tsx b/packages/frontend-shared/src/components/TerminalPrompt.cy.tsx index e68b7ed53905..f59afbd6ee60 100644 --- a/packages/frontend-shared/src/components/TerminalPrompt.cy.tsx +++ b/packages/frontend-shared/src/components/TerminalPrompt.cy.tsx @@ -23,7 +23,7 @@ describe('', () => { )) - cy.contains(command) + cy.findByDisplayValue(command).should('be.visible') cy.contains('button', defaultMessages.clipboard.copy) .should('be.visible') .percySnapshot() diff --git a/packages/frontend-shared/src/components/TerminalPrompt.vue b/packages/frontend-shared/src/components/TerminalPrompt.vue index e9ff97883a5c..4a7266d2065f 100644 --- a/packages/frontend-shared/src/components/TerminalPrompt.vue +++ b/packages/frontend-shared/src/components/TerminalPrompt.vue @@ -1,11 +1,17 @@