Skip to content

tyler36/ddev-cypress

Repository files navigation

DDEV-cypress

tests project is maintained

Introduction

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.

The main benefit is integration of Chrome and Firefox browsers out of the box, providing a known static state regardless of local OS or cloud CI/CS development. It also provides X11 display support for MacOS and Windows users, whereas this usually just works in Linux.

This addon:

  • provides Cypress without the need to install Node.js
  • provides Firefox and Chromium out of the box, preconfigured for Cypress
  • configures your project's HTTPS site a base URL
  • provides helper commands for running Cypress GUI or in headless mode

Installing Cypress with favorite package manager works great locally. However, maintaining a consistent node and browser environments across teams, operating systrems, CI/CS development pipelines and cloud development spaces can become a challenge.

Browser testing using Cypress sets up Cypress for Drupal manually. For Linux users this could be easier, since X11 and Firefox are usually already present.

Requirements

  • DDEV >= 1.19
  • Modern OS
    • MacOS 10.9 and above (Intel or Apple Silicon 64-bit (x64 or arm64))
    • Linux Ubuntu 12.04 and above, Fedora 21 and Debian 8 (x86_64 or Arm 64-bit (x64 or arm64))
    • Windows 7 and above (64-bit)
  • Interactive mode requires a X11 server running on the host machine.

Steps

  • Install service

    For DDEV v1.23.5 or above run

    ddev add-on get tyler36/ddev-cypress

    For earlier versions of DDEV run

    ddev get tyler36/ddev-cypress

    Then restart the project

    ddev restart
  • Run cypress via ddev cypress-open or ddev cypress-run (headless).

We recommend running ddev cypress-open first to create configuration and support files. This addon sets CYPRESS_baseUrl to DDEV's primary URL in the docker-compose.cypress.yaml.

Configure DISPLAY

To display the Cypress screen and browser output, you must configure a DISPLAY environment variable.

Windows 10

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.

Running DDEV on Win10 (not WSL)
  • 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 is 192.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 (For example 192.168.0.196:0 ) to the display section under environment.
    environment:
      - DISPLAY=192.168.0.196:0

A note about the Cypress image

This recipe uses the latest cypress/include image which includes the following browsers:

  • Chrome
  • Firefox
  • Electron

Best practice encourages using a specific image tag.

  • If you require a specific browser, update image in your ./.ddev/docker-compose.cypress.yaml.
  • Available images and versions are available on the cypress-docker-images page.

Commands

Cypress can run into 2 different modes: interactive and runner. This recipe includes 2 alias commands to help you use Cypress.

To see Cypress in interactive mode, Cypress forward XVFB messages out of the Cypress container into an X11 server running on the host machine. Each OS has different options. Developers have reported success with the following:

cypress-open

To open cypress in "interactive" mode, run the following command:

ddev cypress-open

See "#cypress open" documentation for a full list of available arguments.

Example: To open Cypress in interactive mode, and specify a config file

ddev cypress-open --config cypress.json

cypress-run

To run Cypress in "runner" mode, run the following command:

ddev cypress-run

See #cypress run for a full list of available arguments.

Example: To run all Cypress tests, using Chrome in headless mode

ddev cypress-run --browser chrome

Notes

  • 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 specific settings, such as environmental variables. Pass them through via command arguments.

Troubleshooting

"Could not find a Cypress configuration file, exiting"

Cypress expects a directory structures containing the tests, plugins and support files.

  • If the ./cypress directory does not exist, it will scaffold out these directories, including a default cypress.json setting file and example tests when you first run ddev cypress-open.
  • Make sure you have a cypress.json file in your project root, or use --config [file] argument to specify one.

"Unable to open X display."

  • This recipe forwards the Cypress GUI via an X11 / X410 server. Please ensure you have this working on your host system.

Contributed by @tyler36