PHPackages                             shipmonk/coverage-guard - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Testing &amp; Quality](/categories/testing)
4. /
5. shipmonk/coverage-guard

ActiveLibrary[Testing &amp; Quality](/categories/testing)

shipmonk/coverage-guard
=======================

Enforce code coverage in your CI. Not by percentage, but target core methods. No more untested Facades, Controllers, or Repositories. Allows you to start enforcing coverage for new code only!

1.0.2(4mo ago)5318.5k—4.3%[2 PRs](https://github.com/shipmonk-rnd/coverage-guard/pulls)4MITPHPPHP ^8.1CI passing

Since Oct 2Pushed 1mo ago2 watchersCompare

[ Source](https://github.com/shipmonk-rnd/coverage-guard)[ Packagist](https://packagist.org/packages/shipmonk/coverage-guard)[ RSS](/packages/shipmonk-coverage-guard/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (3)Dependencies (14)Versions (10)Used By (4)

PHP Code Coverage Guard
=======================

[](#php-code-coverage-guard)

**Enforce code coverage** in your CI with ease! Not by percentage, but target **core functionality**.

- 🎮 **Game-changer:** Innovative approach to code coverage enforcement!
- 💾 **Legacy-friendly:** Allows you to start enforcing for new code only!
- ⚙️ **Extensible:** You specify what must be covered!
- 🕸️ **Lightweight:** Only depends on `nikic/php-parser`
- 🍰 **Easy-to-use:** No config needed for first try

This tool helps ensure that certain code blocks are covered by tests, typically core methods in Facades, Controllers, and other key areas of your application.

Installation
------------

[](#installation)

```
composer require --dev shipmonk/coverage-guard
```

Example usage
-------------

[](#example-usage)

```
# Run tests, collect coverage, generate report:
XDEBUG_MODE=coverage vendor/bin/phpunit tests --coverage-filter src --coverage-clover clover.xml

# Verify coverage:
vendor/bin/coverage-guard check clover.xml
```

### Example output:

[](#example-output)

[![](img/error_output.png)](img/error_output.png)

In real application, you will probably use `phpunit.xml` to [configure PHPUnit coverage](https://docs.phpunit.de/en/10.5/code-coverage.html#including-files):

```

        src

```

To collect coverage, you can pick traditional [XDebug](https://xdebug.org/docs/install) or performant [PCOV](https://github.com/krakjoe/pcov/blob/develop/INSTALL.md) extension.

Enforce coverage for new code only
----------------------------------

[](#enforce-coverage-for-new-code-only)

```
git diff master...HEAD > changes.patch
vendor/bin/coverage-guard check clover.xml --patch changes.patch
```

- When patch is provided, this tool will only analyse changed files and methods and won't report violations from elsewhere.
- This allows you to gradually enforce code coverage for new code only.

Configuration
-------------

[](#configuration)

- Create a `coverage-guard.php` file in your project root to customize behavior and set up your `CoverageRules`.
    - You can generate quick-start one by `vendor/bin/coverage-guard init`
- The config file must return an instance of `ShipMonk\CoverageGuard\Config`
- Here is what you can configure:

```
