worksome / pest-graphql-coverage
A plugin for Pest to add GraphQL coverage via Lighthouse
Requires
- php: ^8.4
- illuminate/contracts: ^12.0 || ^13.0
- nuwave/lighthouse: ^6.44
- pestphp/pest: ^4.7|^5.0
- pestphp/pest-plugin-laravel: ^4.1|^5.0
Requires (Dev)
- larastan/larastan: ^3.10
- nunomaduro/collision: ^8.9
- orchestra/testbench: ^10.11 || ^11.1
- worksome/coding-style: ^4.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
This plugin adds support for showing the coverage of the GraphQL schema (Lighthouse only).
Installation
You can install the package via composer:
composer require --dev worksome/pest-graphql-coverage
Usage
To enable it simply add --gql-coverage argument to your test command
php artisan test --gql-coverage
It can even be used together with parallel
php artisan test --gql-coverage -p
Setting coverage limits
By adding the argument --gql-min=<percentage>, we can limit to have a min coverage of x.
php artisan test --gql-coverage --gql-min=60
Setting the number of output fields
By adding the argument --gql-untested-count=<max>, we can increase or reduce the number of untested fields
that are output.
php artisan test --gql-coverage --gql-untested-count=25
Changing default schema fetching command
By default, it will fetch the schema using php artisan lighthouse:print-schema, however if you have a
custom command for fetching the schema, that can be used instead by adding --schema-command argument
php artisan test --gql-coverage --schema-command="php artisan lighthouse:print-schema-v2"
Excluding nodes from total coverage
By default, all nodes will be included when calculating coverage. However, if you have nodes such as the built-in
Lighthouse pagination types that you do not want to be covered, you can configure ignored fields from your Pest.php configuration file.
<?php declare(strict_types=1); use Worksome\PestGraphqlCoverage\Config as GraphQLCoverageConfig; GraphQLCoverageConfig::new() ->ignore([ 'PaginatorInfo.count', // ... ]); // Exclude all paginator info nodes GraphQLCoverageConfig::new() ->ignorePaginatorInfo(); // Exclude all deprecated fields GraphQLCoverageConfig::new() ->ignoreDeprecatedFields();
Native Pest usage
This also works natively with Pest (without using Artisan), as it is a Pest plugin.
vendor/bin/pest --gql-coverage
License
The MIT License (MIT). Please see License File for more information.