PHPackages                             get-skipper/skipper-php - 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. get-skipper/skipper-php

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

get-skipper/skipper-php
=======================

Test-gating via Google Spreadsheet for PHP test frameworks

v1.3.0(1mo ago)21↓77.8%MITPHPPHP &gt;=8.2CI passing

Since Mar 15Pushed 1mo agoCompare

[ Source](https://github.com/get-skipper/skipper-php)[ Packagist](https://packagist.org/packages/get-skipper/skipper-php)[ RSS](/packages/get-skipper-skipper-php/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (4)Dependencies (16)Versions (7)Used By (0)

skipper-php
===========

[](#skipper-php)

[![Tests](https://github.com/get-skipper/skipper-php/actions/workflows/tests.yml/badge.svg)](https://github.com/get-skipper/skipper-php/actions/workflows/tests.yml)[![Latest Version on Packagist](https://camo.githubusercontent.com/7044bef11165768fee845858479fb03c5e37d38d93e82d1a88c4f97a4896278e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6765742d736b69707065722f736b69707065722d7068702e737667)](https://packagist.org/packages/get-skipper/skipper-php)[![PHP](https://camo.githubusercontent.com/f8f5e921da6cf350b4849b3152d79ac4420789429492db95cb7e5e50441a1e02/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6765742d736b69707065722f736b69707065722d7068702e737667)](https://packagist.org/packages/get-skipper/skipper-php)[![License](https://camo.githubusercontent.com/6ac96ca1a29973054f2526a5ac7d1216ad8235992c65f2c51a23f8c5db733dcf/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6765742d736b69707065722f736b69707065722d7068702e737667)](LICENSE)

Test-gating for PHP via Google Spreadsheet. Enable or disable tests without changing code — just update a date in a Google Sheet.

A PHP port of [get-skipper/skipper](https://github.com/get-skipper/skipper), supporting PHPUnit, Pest, Behat, Codeception, PHPSpec, and Kahlan.

---

How it works
------------

[](#how-it-works)

A Google Spreadsheet stores test IDs with optional `disabledUntil` dates:

testIddisabledUntilnotes`tests/Feature/AuthTest.php > AuthTest > testItCanLogin``tests/Feature/PaymentTest.php > PaymentTest > testCheckout``2099-12-31`Flaky on CI`features/auth.feature > Auth > User can log in``2026-06-01`Under investigation- **Empty `disabledUntil`** → test runs normally
- **Past date** → test runs normally
- **Future date** → test is skipped automatically

Tests not listed in the spreadsheet **always run** (opt-out model).

---

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

[](#installation)

```
composer require get-skipper/skipper-php
```

Install your test framework if not already present:

```
# PHPUnit / Pest
composer require --dev phpunit/phpunit

# Behat
composer require --dev behat/behat

# Codeception
composer require --dev codeception/codeception

# PHPSpec
composer require --dev phpspec/phpspec

# Kahlan
composer require --dev kahlan/kahlan
```

---

Google Sheets setup
-------------------

[](#google-sheets-setup)

1. Create a Google Spreadsheet with the following columns in row 1:

    - `testId`
    - `disabledUntil`
    - `notes` (optional)
2. Create a Google Cloud service account and download the JSON key file.
3. Share the spreadsheet with the service account's email address (`client_email` in the JSON).
4. Note the spreadsheet ID from the URL: `https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit`

---

Credentials
-----------

[](#credentials)

Three formats are accepted for all integrations:

FormatParameterUse caseFile path`credentialsFile: './service-account.json'`Local developmentBase64 string`credentialsBase64: 'eyJ0eX...'`CI/CD inline secretEnvironment variable`credentialsEnvVar: 'GOOGLE_CREDS_B64'`CI/CD env var (base64)To encode your credentials file for CI:

```
base64 -i service-account.json
```

---

Framework integrations
----------------------

[](#framework-integrations)

### PHPUnit (10 / 11 / 12)

[](#phpunit-10--11--12)

Add to `phpunit.xml`:

```

      tests

```

**Test ID format:**

```
tests/Unit/AuthTest.php > AuthTest > testItCanLogin
tests/Unit/AuthTest.php > AuthTest > testWithDataProvider with data set "valid"

```

---

### Pest (v2 / v3)

[](#pest-v2--v3)

Pest runs on top of PHPUnit — use the same `phpunit.xml` configuration above. The extension auto-detects Pest-generated classes (`P\` namespace prefix) and applies the correct ID format automatically.

**Test ID format:**

```
tests/Feature/auth.php > can login
tests/Feature/auth.php > Auth > can login      ← with describe() block

```

**Alternative: hook-based setup via `tests/Pest.php`**

Use this if you prefer Pest-native configuration instead of `phpunit.xml`:

```
