My team decided to build a Docker image that contained Cypress, dependencies and all our end-to-end (E2E) tests.
That way, anyone could simply pull the image and with a single command it was ready to run tests. Also, the developers and the CI pipeline we both using the same image, which made our test results more coherent and easier to reproduce.
This was our final Dockerfile:
# use the official Cypress image as base (keep this up to date) FROM cypress/browsers:node13.6.0-chrome80-ff72 RUN useradd -ms /bin/bash cypress RUN install -d -m 0755 -o cypress -g cypress /app RUN chown cypress:cypress /app WORKDIR /app ENV CYPRESS_CACHE_FOLDER="/app/.cypress" ENV CI=true # reduce Cypress logging USER cypress # install dependencies COPY package.json yarn.lock ./ RUN yarn install --frozen-lockfile # confirm that Cypress was installed correctly RUN npx cypress verify # copy files required by yarn tasks COPY .eslintrc .prettierrc.yaml cypress.json ./ # copy reporter config, used to output JUnit XML COPY reporter.config.json ./ # copy tests COPY cypress cypress
After a whole year of writing and maintaining Cypress tests, I learned a lot and added several features on top of the default Cypress behaviour.
So if you want to start writing Cypress tests, you don’t have to start from scratch like I did: check this template repo.