- git
- node js
- vscode
- check node version
node -v - check npm version
npm -v - install npm
npm install - start npm
npm start - visit
http://localhost:4200/ - install cypress
npm install cypress --save-dev - open cypress
npx cypress open
npm install -g npm-check-updates
npm-check-updates -u
npm install
Add configuration in cypress.json
{
"baseUrl": "http://localhost:4200",
"ignoreTestFiles": "**/examples/*",
"viewportHeight": 768,
"viewportWidth": 1024
}- add
firstTest.spec.js - run
npm start - run
npx cypress open
CLI
- run
npx cypress run - run in chrome
npx cypress run --browser chrome - run tests from a single spec file and record the results on the Dashboard
npx cypress run --record --spec "cypress/integration/my-spec.js" - don't record video -add
"video": falsein cypress.json - starts server, waits for URL, then runs test command, when the tests end, shuts down server run command
npm install --save-dev start-server-and-test
This command is meant to be used with NPM script commands. If you have a "start server", and "test" script names for example, you can start the server, wait for a url to respond, then run tests. When the test process exits, the server is shut down.- add
"cypress:e2e":"start-test start http-get://localhost:4200 cypress:run"in package.json -> scripts - run
npm run cypress:e2e
Cypress-plugin-retries
- install
npm install -D cypress-plugin-retries - add in cypress/support/index.js
import 'cypress-plugin-retries' - to enable retry logging in the terminal alongside mocha output Inside cypress/plugins/index.js
module.exports = (on, config) => {
require('cypress-plugin-retries/lib/plugin')(on)
}- add
CYPRESS_RETRIES=2in cypress:run - set the
envkey in yourcypress.jsonconfiguration file to set the retry number for all spec files
{
"env":
{
"RETRIES": 2
}
}- change env
npx cypress open --env configFile=qa
Reporters
- install
npm install --save-dev cypress-multi-reporters mocha-junit-reporter - configuration file
cypress.json
{
"reporter": "cypress-multi-reporters",
"reporterOptions": {
"configFile": "reporter-config.json"
}
}- create file
reporter-config.json - direct the junit reporter to save separate XML files.
{
"reporterEnabled": "spec, mocha-junit-reporter",
"mochaJunitReporterReporterOptions": {
"mochaFile": "cypress/results/results-[hash].xml"
}
}- for deleting all files from the cypress/results folder before running this command, since each run will output new XML files. Add the npm script commands below to your
package.jsonthen call npm run report.
{
"scripts": {
"delete:reports": "rm cypress/results/* || true",
"prereport": "npm run delete:reports",
"report": "cypress run --reporter cypress-multi-reporters --reporter-options configFile=reporter-config.json"
}
}- install Mochawesome
npm install --save-dev mochawesome mochawesome-merge mochawesome-report-generator junit-merge - add to
reporter-config.json
"reporterOptions": {
"reportDir": "cypress/results",
"overwrite": false,
"html": false,
"json": true
}- add to package.json for combine them using the mochawesome-merge utility and generate a combined HTML
"mochawesome:merge":"npx mochawesome-merge \"cypress/results/*.json\" > mochawesome.json && npx marge mochawesome.json"
Docker
- create
Dockerfile - add the follow code to
Dockerfile
FROM cypress/base:12.18.0
RUN npm install --save-dev cypress
RUN $(npm bin)/cypress verify
RUN $(npm bin)/cypress run
- install docker and run it
- docker build
docker build -t cypress .
- create file
docker-compose.yml - run
docker-compose up
Cross Browser Testing
// Run the test if Cypress is run via Firefox
it('Download extension in Firefox', { browser: 'firefox' }, () => {
cy.get('#dl-extension')
.should('contain', 'Download Firefox Extension')
})
// Run happy path tests if Cypress is run via Firefox
describe('happy path suite', { browser: 'firefox' }, () => {
it('...')
it('...')
it('...')
})
// Ignore test if Cypress is running via Chrome
// This test is not recorded to the Cypress Dashboard
it('Show warning outside Chrome', { browser: '!chrome' }, () => {
cy.get('.browser-warning')
.should('contain', 'For optimal viewing, use Chrome browser')
})