Passer au contenu principal

Qu’est-ce qu’Orchestra Testbench

Orchestra Testbench est un helper de test Laravel dédié au développement de packages. En héritant de Orchestra\Testbench\TestCase, vous pouvez tester un package isolé comme s’il tournait à l’intérieur d’une application Laravel. La documentation officielle sur le développement de packages recommande également Testbench pour les tests de packages.

Installation

1

Installer Testbench

composer require --dev orchestra/testbench
2

Créer un TestCase de base

<?php

namespace Vendor\Package\Tests;

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

abstract class TestCase extends BaseTestCase
{
    /**
     * $app est l'instance d'application Laravel démarrée par Testbench.
     */
    protected function getPackageProviders($app): array
    {
        return [
            PackageServiceProvider::class,
        ];
    }
}
3

Ajouter configuration et alias si nécessaire

Avec getPackageAliases(), vous pouvez enregistrer les alias de façade à utiliser pendant les tests, comme les aliases de config/app.php.
protected function getPackageAliases($app): array
{
    return [
        'Package' => \Vendor\Package\Facades\Package::class,
    ];
}

protected function defineEnvironment($app): void
{
    // Surcharge de configuration propre aux tests
    $app['config']->set('package.enabled', true);
}

Rédiger des tests de base

Vérifiez d’abord que le service provider est chargé, que la façade se comporte comme attendu et que la configuration est appliquée.
<?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
    {
        // Vérifier la fonctionnalité via la façade
        $this->assertSame('ok', Package::status());
    }

    public function test_package_config_is_available(): void
    {
        // Vérifier la valeur définie dans defineEnvironment()
        $this->assertTrue(config('package.enabled'));
    }
}

Tests avec système de fichiers et base de données

Pour les tests utilisant la base de données, configurez SQLite en mémoire dans defineEnvironment() et chargez les migrations à tester.
<?php

namespace Vendor\Package\Tests;

use Orchestra\Testbench\TestCase as BaseTestCase;

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

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

        // Charger les migrations du package
        $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
    }
}
public function test_it_persists_data(): void
{
    \DB::table('widgets')->insert(['name' => 'test']);

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

Tester plusieurs versions de Laravel

La version majeure de Testbench correspond à celle de Laravel. Consultez Version Compatibility officielle pour les détails.
LaravelTestbench
12.x10.x
13.x11.x
Pour une vérification continue sur plusieurs versions, combinez avec une matrice GitHub Actions. Pour la philosophie de conception, voyez Gestion de la compatibilité de versions de package.
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"

Résumé

Testbench permet de valider le comportement d’un package dans des conditions proches de la production, sans avoir à monter à la main une application Laravel. En couvrant enregistrement du service provider, configuration, façade et base de données, vous réduisez fortement les défauts post-release.

Pages associées

Développement de packages Laravel

Passez en revue les fondations d’une implémentation de package centrée sur le service provider.

Gestion de la compatibilité de versions de package

Passez en revue la stratégie de versions Laravel/Testbench et la matrice de CI.
Dernière modification le 13 juillet 2026