askill
pest-testing-setup

pest-testing-setupSafety 90Repository

Set up Pest testing with Orchestra Testbench for Laravel packages

15 stars
1.2k downloads
Updated 1/29/2026

Package Files

Loading files...
SKILL.md

PestPHP Testing Setup Skill

Adds complete PestPHP testing infrastructure to an existing Laravel package.

Usage

When the user wants to add testing to an existing package:

python3 ${SKILL_DIR}/scripts/setup_pest_testing.py <vendor/package-name> [options]

Options

  • --filament - Include Filament/Livewire testing utilities
  • --with-coverage - Add code coverage configuration
  • --with-ci - Add GitHub Actions CI workflow

Examples

Basic testing setup

python3 ${SKILL_DIR}/scripts/setup_pest_testing.py mwguerra/my-package

With Filament support

python3 ${SKILL_DIR}/scripts/setup_pest_testing.py mwguerra/filament-blog --filament

Full setup with CI

python3 ${SKILL_DIR}/scripts/setup_pest_testing.py mwguerra/my-package --with-coverage --with-ci

What Gets Created/Updated

Files Created

  1. phpunit.xml - PHPUnit configuration

    • Code coverage for src/ directory
    • Unit and Feature test suites
    • Testing environment variables
    • APP_KEY for Laravel testing
  2. tests/Pest.php - PestPHP configuration

    • TestCase binding for all tests
    • Custom expectations setup
    • Helper functions section
  3. tests/TestCase.php - Orchestra TestCase

    • Package service provider registration
    • Testing database configuration
    • Environment setup
    • Migration handling
  4. tests/Unit/ExampleTest.php - Sample unit test

    • Environment verification
    • Service provider registration test
    • Basic package functionality test
  5. tests/Feature/.gitkeep - Feature tests directory

  6. .github/workflows/tests.yml (if --with-ci)

    • GitHub Actions workflow
    • Multi-PHP version testing
    • Code coverage reporting

composer.json Updates

{
  "require-dev": {
    "orchestra/testbench": "^10.0",
    "pestphp/pest": "^3.8",
    "pestphp/pest-plugin-laravel": "^3.1"
  },
  "autoload-dev": {
    "psr-4": {
      "Vendor\\PackageName\\Tests\\": "tests/"
    }
  },
  "scripts": {
    "test": "pest",
    "test-coverage": "pest --coverage"
  }
}

Note: Uses latest versions for Laravel 11/12 compatibility:

  • Orchestra Testbench ^10.0 - For Laravel 11 & 12
  • PestPHP ^3.8 - Latest stable
  • Pest Plugin Laravel ^3.1 - Latest stable

Running Tests

After setup:

# Navigate to package
cd packages/vendor/package-name

# Install dependencies (including dev)
composer install

# Run all tests
./vendor/bin/pest

# Run with coverage
./vendor/bin/pest --coverage

# Run specific test file
./vendor/bin/pest tests/Unit/ExampleTest.php

# Run filtered tests
./vendor/bin/pest --filter="service provider"

# Run in parallel
./vendor/bin/pest --parallel

Writing Tests

Basic Test Structure

test('it does something', function () {
    // Arrange
    $data = ['key' => 'value'];
    
    // Act
    $result = processData($data);
    
    // Assert
    expect($result)->toBeTrue();
});

Testing Service Provider

test('service is registered', function () {
    expect($this->app->bound('my-service'))->toBeTrue();
});

Testing Commands

test('command runs successfully', function () {
    $this->artisan('my-package:command')
        ->expectsOutput('Success!')
        ->assertSuccessful();
});

Testing with Database

uses(RefreshDatabase::class);

test('it creates model', function () {
    $model = MyModel::create(['name' => 'Test']);
    
    expect($model)->toBeInstanceOf(MyModel::class);
    $this->assertDatabaseHas('my_models', ['name' => 'Test']);
});

Testing Livewire Components (Filament)

use Livewire\Livewire;

test('component renders', function () {
    Livewire::test(MyComponent::class)
        ->assertSee('Expected text')
        ->assertStatus(200);
});

Best Practices

  1. One assertion per test - Keep tests focused
  2. Descriptive names - Test names should describe behavior
  3. Arrange-Act-Assert - Structure tests clearly
  4. Test edge cases - Empty arrays, null values, boundaries
  5. Use datasets - For testing multiple scenarios
  6. Mock external services - Don't call real APIs in tests

Filament testing

When --filament is enabled, tests should follow Filament’s guidance:

  • Filament components are Livewire components; use livewire() / Livewire::test().
  • Test Resources via their URLs and their underlying Livewire components.
  • Use table/schema/action helpers to assert columns, filters, actions, and notifications.

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

92/100Analyzed 2/12/2026

A comprehensive skill for setting up PestPHP testing in Laravel packages. It provides a clear command to trigger a setup script, details the files created, and offers extensive, well-structured examples for writing and running tests.

90
95
80
90
95

Metadata

Licenseunknown
Version-
Updated1/29/2026
Publishermwguerra

Tags

ci-cddatabasegithubgithub-actionstesting