| title | Configuring cypress |
|---|---|
| description | A guide for generating Trunk-compatible test reports for Cypress tests |
You can automatically detect and manage flaky tests in your Cypress projects by integrating with Trunk. This document explains how to configure Cypress to output JUnit XML reports that can be uploaded to Trunk for analysis.
By the end of this guide, you should achieve the following before proceeding to the next steps to configure your CI provider.
- Generate a compatible test report
- Configure the report file path or glob
- Disable retries for better detection accuracy
- Test uploads locally
After correctly generating reports following the above steps, you'll be ready to move on to the next steps to configure uploads in CI.
Cypress has a built-in Mocha JUnit reporter which outputs XML test reports. However, the built-in reporter does not include file paths in test case elements, which means Trunk cannot match tests to code owners or enable file-based filtering in the dashboard.
For full functionality including code owner detection and file-based search, use the cypress-junit-plugin reporter. It outputs test cases with the correct nested structure and file path attributes that Trunk expects.
Install the plugin:
npm install --save-dev @saucelabs/cypress-junit-pluginUpdate your Cypress config:
{% code title="cypress.config.js" %}
const { defineConfig } = require('cypress')
module.exports = defineConfig({
reporter: '@saucelabs/cypress-junit-plugin',
reporterOptions: {
mochaFile: './junit.xml',
},
}){% endcode %}
If you don't need file path matching or code owner detection, you can use the built-in reporter. Uploads will still work, but you will see warnings about missing file paths and won't be able to search by file in the dashboard.
{% code title="cypress.config.js" %}
const { defineConfig } = require('cypress')
module.exports = defineConfig({
reporter: 'junit',
reporterOptions: {
mochaFile: './junit.xml',
toConsole: true,
},
}){% endcode %}
{% hint style="info" %}
The built-in Mocha JUnit reporter places the file attribute on <testsuite> elements but not on individual <testcase> elements. Trunk requires file paths on test cases for code owner matching. If you see warnings like "report has test cases with missing file or filepath", switch to the cypress-junit-plugin above.
{% endhint %}
The JUnit report location is specified by the mochaFile property in your Cypress config. In the above example, the file will be at ./junit.xml.
You need to disable automatic retries if you previously enabled them. Retries compromise the accurate detection of flaky tests.
You can disable retries by setting retries: 0 in your Cypress config file.
{% code title="cypress.config.js" %}
module.exports = defineConfig({
retries: 0,
}){% endcode %}
{% tabs %} {% tab title="Linux (x64)" %}
SKU="trunk-analytics-cli-x86_64-unknown-linux.tar.gz"
curl -fL --retry 3 \
"https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
| tar -xz
chmod +x trunk-analytics-cli
./trunk-analytics-cli validate --junit-paths "./junit.xml"{% endtab %}
{% tab title="Linux (arm64)" %}
SKU="trunk-analytics-cli-aarch64-unknown-linux.tar.gz"
curl -fL --retry 3 \
"https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
| tar -xz
chmod +x trunk-analytics-cli
./trunk-analytics-cli validate --junit-paths "./junit.xml"{% endtab %}
{% tab title="macOS (arm64)" %}
SKU="trunk-analytics-cli-aarch64-apple-darwin.tar.gz"
curl -fL --retry 3 \
"https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
| tar -xz
chmod +x trunk-analytics-cli
./trunk-analytics-cli validate --junit-paths "./junit.xml"{% endtab %}
{% tab title="macOS (x64)" %}
SKU="trunk-analytics-cli-x86_64-apple-darwin.tar.gz"
curl -fL --retry 3 \
"https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
| tar -xz
chmod +x trunk-analytics-cli
./trunk-analytics-cli validate --junit-paths "./junit.xml"{% endtab %} {% endtabs %}
Before modifying your CI jobs to automatically upload test results to Trunk, try uploading a single test run manually.
You make an upload to Trunk using the following command:
./trunk-analytics-cli upload --junit-paths "./junit.xml" \
--org-url-slug <TRUNK_ORG_SLUG> \
--token <TRUNK_ORG_TOKEN>You can find your Trunk organization slug and token in the settings or by following these instructions. After your upload, you can verify that Trunk has received and processed it successfully in the Uploads tab. Warnings will be displayed if the report has issues.

Configure your CI to upload test runs to Trunk. Find the guides for your CI framework below:
| Azure DevOps Pipelines | azure-devops-pipelines.md | azure.png | |
| BitBucket Pipelines | bitbucket-pipelines.md | bitbucket.png | |
| BuildKite | buildkite.md | buildkite.png | |
| CircleCI | circleci.md | circle-ci.png | |
| Drone CI | droneci.md | drone.png | |
| GitHub Actions | github-actions.md | github.png | |
| GitLab | gitlab.md | gitlab.png | |
| Jenkins | jenkins.md | jenkins.png | |
| Semaphore | semaphoreci.md | semaphore.png | |
| TeamCity | broken-reference | teamcity.png | |
| Travis CI | travisci.md | travis.png | |
| Other CI Providers | otherci.md | other.png |