From d7a7174702372246e65b2cd8be2e21dc4b0ea766 Mon Sep 17 00:00:00 2001 From: Kevin Old Date: Wed, 2 Oct 2019 14:53:56 -0500 Subject: [PATCH 1/3] =?UTF-8?q?Update=20Continuous=20Integration=20doc=20w?= =?UTF-8?q?ith=20details=20for=20AWS=20Amplify=E2=80=A6=20(#2124)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../guides/guides/continuous-integration.md | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/source/guides/guides/continuous-integration.md b/source/guides/guides/continuous-integration.md index 69a3eb3cc1..dcc3908099 100644 --- a/source/guides/guides/continuous-integration.md +++ b/source/guides/guides/continuous-integration.md @@ -164,6 +164,7 @@ Cypress should run on **all** CI providers. We have provided some example projec CI Provider | Example Project | Example Config ----------- | --------------- | -------------- +{% url "AWS Amplify Console" https://aws.amazon.com/amplify/console %} | {% url "cypress-example-kitchensink" https://github.com/cypress-io/cypress-example-kitchensink %} | {% url "amplify.yml" https://github.com/cypress-io/cypress-example-kitchensink/blob/master/amplify.yml %} {% url "AppVeyor" https://appveyor.com %} | {% url "cypress-example-kitchensink" https://github.com/cypress-io/cypress-example-kitchensink %} | {% url "appveyor.yml" https://github.com/cypress-io/cypress-example-kitchensink/blob/master/appveyor.yml %} {% url "Azure DevOps / VSTS CI / TeamFoundation" https://dev.azure.com/ %} | {% url "cypress-example-kitchensink" https://github.com/bahmutov/cypress-example-kitchensink %} | {% url "vsts-ci.yml" https://github.com/bahmutov/cypress-example-kitchensink/blob/master/vsts-ci.yml %} {% url "BitBucket" https://bitbucket.org/product/features/pipelines %} | {% url "cypress-example-kitchensink" https://bitbucket.org/cypress-io/cypress-example-kitchensink %} | {% url "bitbucket-pipelines.yml" https://bitbucket.org/cypress-io/cypress-example-kitchensink/src/master/bitbucket-pipelines.yml %} @@ -323,6 +324,90 @@ jobs: Find the complete CircleCI v2 example with caching and artifact upload in the {% url "cypress-example-docker-circle" https://github.com/cypress-io/cypress-example-docker-circle %} repo. +### Example `amplify.yml` + +```yaml +version: 0.1 +frontend: + phases: + preBuild: + commands: + - npm install + build: + commands: + - npm run build + artifacts: + baseDirectory: app + files: + - "**/*" + cache: + paths: + - node_modules/**/* +test: + artifacts: + baseDirectory: cypress + configFilePath: "**/mochawesome.json" + files: + - "**/*.png" + - "**/*.mp4" + phases: + preTest: + commands: + - npm install + - npm install wait-on + - npm install mocha@5.2.0 mochawesome mochawesome-merge mochawesome-report-generator + - "npm start & npx wait-on http://127.0.0.1:8080" + test: + commands: + - 'npx cypress run --reporter mochawesome --reporter-options "reportDir=cypress/report/mochawesome-report,overwrite=false,html=false,json=true,timestamp=mmddyyyy_HHMMss"' + postTest: + commands: + - npx mochawesome-merge --reportDir cypress/report/mochawesome-report > cypress/report/mochawesome.json +``` + +### Example `amplify.yml` v2 with --record for Cypress Dashboard + +Add `CYPRESS_RECORD_KEY` Enviroment Variable in [Amplify Console](https://aws.amazon.com/amplify/console/). + +```yaml +version: 0.1 +frontend: + phases: + preBuild: + commands: + - npm install + build: + commands: + - npm run build + artifacts: + baseDirectory: app + files: + - "**/*" + cache: + paths: + - node_modules/**/* +test: + artifacts: + baseDirectory: cypress + configFilePath: "**/mochawesome.json" + files: + - "**/*.png" + - "**/*.mp4" + phases: + preTest: + commands: + - npm install + - npm install wait-on + - npm install mocha@5.2.0 mochawesome mochawesome-merge mochawesome-report-generator + - "npm start & npx wait-on http://127.0.0.1:8080" + test: + commands: + - 'npx cypress run --record --reporter mochawesome --reporter-options "reportDir=cypress/report/mochawesome-report,overwrite=false,html=false,json=true,timestamp=mmddyyyy_HHMMss"' + postTest: + commands: + - npx mochawesome-merge --reportDir cypress/report/mochawesome-report > cypress/report/mochawesome.json +``` + ## Docker We have {% url 'created' https://github.com/cypress-io/cypress-docker-images %} an official {% url 'cypress/base' 'https://hub.docker.com/r/cypress/base/' %} container with all of the required dependencies installed. Just add Cypress and go! We are also adding images with browsers pre-installed under {% url 'cypress/browsers' 'https://hub.docker.com/r/cypress/browsers/' %} name. A typical Dockerfile would look like this: From 171d2c33f033b131c9681d5812a10a223f213fa2 Mon Sep 17 00:00:00 2001 From: Misha Bruml Date: Fri, 4 Oct 2019 15:13:13 +0100 Subject: [PATCH 2/3] added keyboard shortcuts to docs --- source/guides/core-concepts/test-runner.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/guides/core-concepts/test-runner.md b/source/guides/core-concepts/test-runner.md index 8f98ef21b5..0b22b73c94 100644 --- a/source/guides/core-concepts/test-runner.md +++ b/source/guides/core-concepts/test-runner.md @@ -154,3 +154,13 @@ Type in text to see which element it matches. Note that {% url `cy.contains()` c If you would like to interact with your app while the Selector Playground is open, the element highlighting might get in the way. Toggling the highlighting off will allow you to interact with your app more easily. {% imgTag /img/guides/test-runner/turn-off-highlight-in-selector-playground.gif "Turn off highlighting" %} + +# Keyboard Shortcuts + +We've added some handy keyboard shortcuts to help quickly run, stop and inspect your tests while using the Test Runner + +| Key | Action | +| ----------- | ----------- | +| r | Rerun tests | +| s | Stop tests | +| f | Bring focus to 'specs' window | From dafcb6dde2041ccaff1d7c0cc8e33a0bcf2962cc Mon Sep 17 00:00:00 2001 From: Jennifer Shehane Date: Fri, 4 Oct 2019 11:28:19 -0400 Subject: [PATCH 3/3] Reword intro and add image of keyboard shortcut tooltips MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - This document could live for another year - so saying ‘we’ve added’ will quickly be outdated. - Add a ‘History’ section to indicate that keyboard shortcuts only work in 3.5.0+ --- source/guides/core-concepts/test-runner.md | 15 +++++++++++---- .../guides/test-runner/keyboard-shortcuts.png | Bin 0 -> 16787 bytes 2 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 themes/cypress/source/img/guides/test-runner/keyboard-shortcuts.png diff --git a/source/guides/core-concepts/test-runner.md b/source/guides/core-concepts/test-runner.md index 0b22b73c94..847f232fd8 100644 --- a/source/guides/core-concepts/test-runner.md +++ b/source/guides/core-concepts/test-runner.md @@ -157,10 +157,17 @@ If you would like to interact with your app while the Selector Playground is ope # Keyboard Shortcuts -We've added some handy keyboard shortcuts to help quickly run, stop and inspect your tests while using the Test Runner +There are keyboard shortcuts to quickly perform common actions from within the Test Runner. | Key | Action | | ----------- | ----------- | -| r | Rerun tests | -| s | Stop tests | -| f | Bring focus to 'specs' window | +| `r` | Rerun tests | +| `s` | Stop tests | +| `f` | Bring focus to 'specs' window | + +{% imgTag /img/guides/test-runner/keyboard-shortcuts.png "Tooltips show keyboard shortcuts" %} + +{% history %} +{% url "3.5.0" changelog#3-5-0 %} | Added keyboard shortcuts to Test Runner +{% url "1.3.0" changelog#1-3-0 %} | Added Selector Playground +{% endhistory %} diff --git a/themes/cypress/source/img/guides/test-runner/keyboard-shortcuts.png b/themes/cypress/source/img/guides/test-runner/keyboard-shortcuts.png new file mode 100644 index 0000000000000000000000000000000000000000..cb47ed54147d512879395278738900b3ee84d4e5 GIT binary patch literal 16787 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 literal 0 HcmV?d00001