Cypress is a "complete end-to-end testing experience". It allows you to write Javascript test files that automate real browsers. For more details, see the Cypress Overview page.
This recipe integrates a Cypress docker image with your DDEV project.
- DDEV >= 1.19
- Windows or Linux
NOTE: This uses cypress/include which does not have arm64 images and therefore does not support M1 Macs.
-
Install service
ddev get tyler36/ddev-cypress ddev restart
-
Add a
./cypress.json
cypress configuration. Note: DDEV automatically sets the "BaseURL" via the image environmental variables. ThebaseURL
setting below will be ignored.
{
"baseURL": "https://ddev-cypress-demo.ddev.site",
"integrationFolder": "./tests/E2E",
}
- Run cypress via
cypress run
(headless) orcypress open
.
To correctly display the Cypress screen and browser output, you must configure a DISPLAY
environment variable.
If you are running DDEV on Win10 or WSL2, you need to configure a display server on Win10. You are free to use any X11-compatible server. A configuration-free solution is to install GWSL via the Windows Store.
- Install GWSL via the Windows Store
- Get you "IPv4 Address" for your "Ethernet adapter" via networking panel or by typing
ipconfig
in a terminal. The address in the below example is192.168.0.196
❯ ipconfig
Windows IP Configuration
Ethernet adapter Ethernet:
Connection-specific DNS Suffix . :
IPv4 Address. . . . . . . . . . . : 192.168.0.196
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.0.1
- In your project
./docker-compose.cypress.yaml
, add the IPv4 address and:0
(EG.192.168.0.196:0
) to the display section under environment.
environment:
- DISPLAY=192.168.0.196:0
This recipe uses the latest cypress/include
image which includes the following browsers:
- Chrome
- Firefox
- Electron
It is considered best practice to use a specific image tag.
- If you require a specific browser, update
image
in your./.ddev/docker-compose.cypress.yaml
. - Available images and versions can be found on the cypress-docker-images page.
Cypress can run into 2 different modes: interactive and runner. This recipe includes 2 alias commands to help you use Cypress.
To open cypress in "interactive" mode, run the following command:
ddev cypress-open
This command also accepts arguments. Refer to the "#cyress open" documentation for further details.
Example: To open Cypress in interactive mode, and specify a config file
ddev cypress-open --config cypress.json
To run Cypress in "runner" mode, run the following command:
ddev cypress-run
This command also accepts arguments. Refer to #cypress run page for a full list of available arguments.
Example: To run all Cypress tests, using Chrome in headless mode
ddev cypress-run --browser chrome
- The dockerized Cypress should find any locally installed plugins in your project's
node_modules
; assuming they are install via npm or yarn. - Some plugins may require additional settings, such as environmental variables. These can be passed through via command arguments.
Cypress expects a directory strutures containing the tests, plugins and support files.
- If the
./cypress
directory does not exist, it will scaffold out these directories, including a defaultcypress.json
setting file and example tests when you first runddev cypress-open
. - Make sure you have a
cypress.json
file in your project root, or use--config [file]
argument to specify one.
- This recipe forwards the Cypress GUI via an X11 / X410 server. Please ensure you have this working on your host system.
- For Windows 10 users, try GWSL (via Microsoft store), or VcXsrv (via chocolatey)
- Add arm64 / mac solution
- Add steps for intergrating into Github Actions
Contributed by @tyler36