packages/testing/playwright/scripts/coverage-workflow.md
This document explains how to generate HTML coverage reports from your Playwright tests to see exactly which parts of your code are being hit.
The coverage workflow consists of three main steps:
First, build the editor-ui with coverage enabled:
# From the project root
pnpm --filter n8n-editor-ui build:coverage
This will:
dist/ directoryRun your Playwright tests with coverage collection enabled:
# From the playwright package directory
cd packages/testing/playwright
# Run E2E tests
pnpm test:e2e
This will:
Generate a detailed HTML report from the collected coverage data:
# From the playwright package directory
pnpm coverage:report
This will:
Open the generated HTML report in your browser:
# The report will be available at:
open coverage/index.html
# Or navigate to:
file:///path/to/packages/testing/playwright/coverage/index.html
The HTML report will show you:
If you see "No coverage files found":
BUILD_WITH_COVERAGE=true pnpm build or pnpm build:docker:coverageBUILD_WITH_COVERAGE=true pnpm test:container:sqlite.nyc_output/{projectName}/ directories
.nyc_output/e2e/.nyc_output/sqlite:e2e/, .nyc_output/postgres:e2e/, etc.If you see low coverage (like 15%):
If multiple coverage files aren't merging:
npx nyc merge coverage/*.json .nyc_output/out.jsonYou can modify nyc.config.js to:
For automated coverage reporting:
# Example GitHub Actions step
- name: Build Docker Image with Coverage
run: pnpm build:docker:coverage
- name: Run Container Coverage Tests
run: pnpm --filter n8n-playwright test:container:sqlite
env:
BUILD_WITH_COVERAGE: 'true'
- name: Generate Coverage Report
run: pnpm --filter n8n-playwright coverage:report
Set minimum coverage requirements in nyc.config.js:
checkCoverage: true,
statements: 80,
branches: 80,
functions: 80,
lines: 80
After running the coverage workflow, you'll have:
packages/testing/playwright/
├── coverage/ # HTML coverage reports
│ ├── index.html # Main coverage report
│ ├── base.css # Report styling
│ └── ... # Individual file reports
├── .nyc_output/ # Raw coverage data (per project)
│ ├── e2e/ # Local mode coverage
│ ├── sqlite:e2e/ # Container mode coverage
│ ├── postgres:e2e/ # Other container modes
│ └── out.json # Merged coverage data
├── nyc.config.ts # NYC configuration
└── scripts/
└── generate-coverage-report.js # Report generation script
pnpm coverage:clean to remove old coverage data when needed