Combined JSON & Mochawesome test report not generating during Cypress tests in Docker container?

1.8k Views Asked by At

I am running Cypress tests inside a Docker container to generate a HTML test report.

Here is my folder structure:

enter image description here

As you can see in the cypress/reports/mocha folder, there are some JSON test results generated. All tests are passing & the 3 JSON files there are populated.

Also, notice the empty cypress/reports/mochareports folder. This should contain the combined JSON of all test results, & a HTML test report.

Here is my package.json:

{
  "name": "cypress-docker",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "clean:reports": "mkdir -p cypress/reports && rm -R -f cypress/reports/* && mkdir cypress/reports/mochareports",
    "pretest": "npm run clean:reports",
    "scripts": "cypress run",
    "chrome:scripts": "cypress run --browser chrome ",
    "firefox:scripts": "cypress run --browser firefox ",
    "combine-reports": "mochawesome-merge cypress/reports/mocha/*.json > cypress/reports/mochareports/report.json",
    "generate-report": "marge cypress/reports/mochareports/report.json -f report -o cypress/reports/mochareports",
    "posttest": "npm run combine-reports && npm run generate-report",
    "test": "npm run scripts || npm run posttest",
    "chrome:test": "npm run pretest && npm run chrome:scripts || npm run posttest",
    "firefox:test": "npm run pretest && npm run firefox:scripts || npm run posttest"
  },
  "keywords": [],
  "author": "QA BOX <[email protected]>",
  "license": "MIT",
  "dependencies": {
    "cypress": "^6.8.0",
    "cypress-multi-reporters": "^1.4.0",
    "mocha": "^8.2.1",
    "mochawesome": "^6.2.1",
    "mochawesome-merge": "^4.2.0",
    "mochawesome-report-generator": "^5.1.0"
  }
}

Here is my cypress.json:

{
    "reporter": "cypress-multi-reporters",
    "reporterOptions": {
        "reporterEnabled": "mochawesome",
        "mochawesomeReporterOptions": {
            "reportDir": "cypress/reports/mocha",
            "quite": true,
            "overwrite": false,
            "html": false,
            "json": true
        }
    }
}

Here are the commands I use to run the tests:

  1. To build the image - docker build -t cyp-dock-mocha-report .
  2. docker-compose run e2e-chrome

Here is my Dockerfile:

FROM cypress/included:6.8.0
RUN mkdir /cypress-docker
WORKDIR /cypress-docker
COPY ./package.json .
COPY ./package-lock.json .
COPY ./cypress.json .
COPY ./cypress ./cypress
RUN npm install
ENTRYPOINT ["npm", "run"]

Here is my docker-compose.yml:

version: "3"
services:
  # this container will run Cypress test using built-in Electron browser
  e2e-electron:
    image: "cyp-dock-mocha-report"
    command: "test"
    volumes:
      - ./cypress/videos:/cypress-docker/cypress/videos
      - ./cypress/reports:/cypress-docker/cypress/reports

  # this container will run Cypress test using Chrome browser
  e2e-chrome:
    image: "cyp-dock-mocha-report"
    command: "chrome:test"
    volumes:
      - ./cypress/videos:/cypress-docker/cypress/videos
      - ./cypress/reports:/cypress-docker/cypress/reports

  # this container will run Cypress test using Firefox browser
  # note that both Chrome and Firefox browsers were pre-installed in the Docker image
  e2e-firefox:
    image: "cyp-dock-mocha-report"
    command: "firefox:test"
    # if you want to debug FF run, pass DEBUG variable like
    environment:
      - DEBUG=cypress:server:browsers:firefox-util,cypress:server:util:process_profiler
    volumes:
      - ./cypress/videos:/cypress-docker/cypress/videos
      - ./cypress/reports:/cypress-docker/cypress/reports

All tests are passing as you can see below:

enter image description here

I don't know why the Mochawesome HTML test report isn't generating, or the merged JSO Can someone please tell me why the merged JSON & the HTML test report aren't being generated in mochareports folder, & how I can get them to?

1

There are 1 best solutions below

1
On

thanks for giving me a hint on how to use docker compose with this image! I think I see where the issue is: in the package.json file, under scripts, instead of "merge", you wrote "marge":

"generate-report": "marge cypress/reports/mochareports/report.json -f report -o cypress/reports/mochareports"