Vai al contenuto principale

Cos’è Orchestra Testbench

Orchestra Testbench è un helper di test Laravel pensato per lo sviluppo di pacchetti. Estendendo Orchestra\Testbench\TestCase puoi testare un pacchetto isolato con la stessa esperienza di quando lavori dentro un’applicazione Laravel. Anche la documentazione ufficiale sullo sviluppo di pacchetti di Laravel raccomanda Testbench per i test.

Setup

1

Installare Testbench

composer require --dev orchestra/testbench
2

Creare un TestCase base

<?php

namespace Vendor\Package\Tests;

use Orchestra\Testbench\TestCase as BaseTestCase;
use Vendor\Package\PackageServiceProvider;

abstract class TestCase extends BaseTestCase
{
    /**
     * $app è l'istanza dell'applicazione Laravel avviata da Testbench.
     */
    protected function getPackageProviders($app): array
    {
        return [
            PackageServiceProvider::class,
        ];
    }
}
3

Aggiungere all'occorrenza configurazioni e alias

In getPackageAliases() puoi registrare gli alias dei facade da usare nei test, come faresti in aliases di config/app.php.
protected function getPackageAliases($app): array
{
    return [
        'Package' => \Vendor\Package\Facades\Package::class,
    ];
}

protected function defineEnvironment($app): void
{
    // qui sovrascrivi le impostazioni per i test
    $app['config']->set('package.enabled', true);
}

Come scrivere i test di base

All’inizio verifica che il service provider sia caricato, che i facade funzionino come previsto e che la configurazione sia applicata.
<?php

namespace Vendor\Package\Tests\Feature;

use Vendor\Package\Facades\Package;
use Vendor\Package\PackageServiceProvider;
use Vendor\Package\Tests\TestCase;

class PackageBootstrapTest extends TestCase
{
    public function test_service_provider_is_registered(): void
    {
        $this->assertTrue($this->app->providerIsLoaded(PackageServiceProvider::class));
    }

    public function test_facade_returns_expected_value(): void
    {
        // verifica la funzionalità tramite il facade
        $this->assertSame('ok', Package::status());
    }

    public function test_package_config_is_available(): void
    {
        // controlla il valore impostato in defineEnvironment()
        $this->assertTrue(config('package.enabled'));
    }
}

Test di filesystem e database

Nei test che usano un DB configura SQLite in-memory in defineEnvironment() e carica le migrazioni da testare.
<?php

namespace Vendor\Package\Tests;

use Orchestra\Testbench\TestCase as BaseTestCase;

abstract class TestCase extends BaseTestCase
{
    protected function defineEnvironment($app): void
    {
        // usa un DB SQLite in-memory
        $app['config']->set('database.default', 'testing');
        $app['config']->set('database.connections.testing', [
            'driver' => 'sqlite',
            'database' => ':memory:',
            'prefix' => '',
        ]);
    }

    protected function setUp(): void
    {
        parent::setUp();

        // carica le migrazioni del pacchetto
        $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
    }
}
public function test_it_persists_data(): void
{
    \DB::table('widgets')->insert(['name' => 'test']);

    $this->assertDatabaseHas('widgets', ['name' => 'test']);
}

Test su più versioni di Laravel

La versione major di Testbench corrisponde alla versione major di Laravel. Per i dettagli consulta la Version Compatibility ufficiale.
LaravelTestbench
12.x10.x
13.x11.x
Per verificare più versioni in continuo, combina con la matrix di GitHub Actions. Per l’impostazione consulta Gestire la compatibilità tra versioni dei pacchetti.
strategy:
  fail-fast: false
  matrix:
    php: [8.3, 8.4]
    laravel: ["^12.0", "^13.0"]
    include:
      - laravel: "^13.0"
        testbench: "^11.0"
      - laravel: "^12.0"
        testbench: "^10.0"
Con Testbench puoi verificare il comportamento del pacchetto in condizioni molto vicine a quelle di produzione, senza dover preparare a mano un’app Laravel. Includendo nei test la registrazione dei service provider, la configurazione, i facade e il DB riduci notevolmente i bug che emergono dopo la release.

Pagine correlate

Sviluppo di pacchetti Laravel

Rivedi le basi di implementazione di un pacchetto incentrato sui service provider.

Gestire la compatibilità tra versioni dei pacchetti

Rivedi la strategia di versioning tra Laravel e Testbench e l’operatività della matrix CI.
Ultima modifica il 13 luglio 2026