worksome/pest-graphql-coverage

A plugin for Pest to add GraphQL coverage via Lighthouse

v0.3.4 2024-04-22 11:39 UTC

README

Latest Version on Packagist Total Downloads

This plugin adds supports 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();

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.