phpunit/php-code-coverage
phpunit/php-code-coverage collects, processes, and renders PHP code coverage data. Integrate it in test runs to start/stop coverage collection, filter included files, and generate reports such as OpenClover, including from serialized coverage data.
CodeCoverage, Driver/Selector)Filter, Report/Facade)Serializer, Unserializer)
This allows TPMs to swap components (e.g., drivers for Xdebug/PCOV) without refactoring core logic.--coverage). Example:
// In Laravel’s PHPUnit.xml or composer.json
"config": {
"coverage": {
"driver": "xdebug",
"include": ["app/*", "tests/*"]
}
}
| Risk Area | Assessment | Mitigation Strategy |
|---|---|---|
| PHP Version Support | Drops PHP 8.3 in v14.0.0; Laravel 10+ requires PHP 8.2+. | Enforce PHP 8.2+ in CI/CD and composer.json. Use ^12.5 for legacy support. |
| Xdebug/PCOV Conflicts | Issues like #1131 may arise. | Test with both drivers in CI; document requirements in README.md. |
| Performance Overhead | XML report generation can be slow for large codebases (e.g., #1102). | Cache reports in CI; use --coverage-clover for lightweight XML. |
| Serialization Breaking Changes | v14.0.0 changed serialization format (removed PHP class). |
Migrate CI scripts to use Serializer/Unserializer; avoid legacy formats. |
| False Positives | Edge cases (e.g., #1160) may misreport coverage. | Validate reports manually; exclude problematic files via Filter. |
Serializer)?--coverage with this package for custom reporting.phpunit.xml or composer.json for test suites.| Component | Laravel Version | PHP Version | Notes |
|---|---|---|---|
phpunit/php-code-coverage |
8.0+ | 8.2+ | Use ^14.1 for latest features. |
| PHPUnit | 9.5+ | 8.1+ | Laravel 10+ uses PHPUnit 10+. |
| Pest | 2.0+ | 8.1+ | Works with Pest’s --coverage flag. |
| Xdebug/PCOV | Any | 8.2+ | PCOV faster; Xdebug more accurate. |
phpunit.xml flags).// composer.json
"require-dev": {
"phpunit/php-code-coverage": "^14.1"
}
phpunit.xml:
<php>
<env name="COVERAGE_DRIVER" value="xdebug"/>
<env name="COVERAGE_FILTER" value="app/,tests/"/>
</php>
# GitHub Actions example
- name: Run tests with coverage
run: ./vendor/bin/phpunit --coverage-clover=coverage.xml
- name: Upload to Codecov
uses: codecov/codecov-action@v3
with:
file: coverage.xml
| Step | Priority | Dependencies | Owner |
|---|---|---|---|
1. Add package to composer.json |
High | None | Backend Engineer |
| 2. Configure PHPUnit | High | phpunit/php-code-coverage |
QA Engineer |
| 3. Update CI workflows | Medium | GitHub Actions/GitLab CI setup | DevOps Engineer |
| 4. Set coverage thresholds | Low | CI integration | Product Manager |
| 5. Document false positives | Low | Initial report analysis | Tech Lead |
--coverage flag with this package:
pest --coverage --coverage-report=html
Filter to exclude vendor/, config/, or legacy modules.composer normalize to manage version constraints.Filter::excludeFiles()).match() expressions in #1157).Xdebug/PCOV is enabled (php -m | grep xdebug).How can I help you explore Laravel packages today?