Step 1: Create the Dockerfile
First, create a Dockerfile to define an environment with Cypress dependencies. This Dockerfile should use an official image containing Node.js, as Cypress is a Node-based application. Here's a simple example:
Dockerfile# Use an official image containing Node.js FROM cypress/base:latest # Create the working directory WORKDIR /e2e # Copy package.json and package-lock.json to the container COPY package*.json ./ # Install dependencies, including Cypress RUN npm install # Copy the test scripts to the container COPY . . # Expose the port EXPOSE 8080 # Run the tests CMD ["npx", "cypress", "run"]
Step 2: Build the Docker Image
Using the Dockerfile, build a Docker image with the following command:
bashdocker build -t my-cypress-image .
This command creates a new Docker image named my-cypress-image.
Step 3: Run Cypress Tests
Once you have a Docker image containing all necessary dependencies, you can run the container and execute Cypress tests within it. Use the following command to run the Docker container:
bashdocker run -it -v $PWD:/e2e -w /e2e my-cypress-image
This command mounts the current directory to the container's /e2e directory using the -v parameter, allowing the container to access your test scripts. The -w parameter sets the working directory of the container to /e2e.
Example: Running Cypress Tests with GUI
If you want to run Cypress in graphical mode, you need to use a Docker image that supports GUI applications and configure X11 forwarding. However, in most cases, we recommend running Cypress tests in headless mode within CI/CD environments.
Conclusion
Running Cypress tests with Docker ensures consistency as it executes in an isolated environment, avoiding issues caused by environment differences. This is a significant advantage for continuous integration and deployment pipelines. By using the base image provided by Cypress, you can easily run your end-to-end tests within Docker containers.