> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Tester des packages Laravel avec Orchestra Testbench

> Découvrez comment construire un environnement de test pour vos packages Laravel avec Orchestra Testbench et valider service providers, façades, configuration et base de données.

## Qu'est-ce qu'Orchestra Testbench

[Orchestra Testbench](https://github.com/orchestral/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](/fr/advanced/package-development) recommande également Testbench pour les tests de packages.

```mermaid theme={null}
flowchart TD
    A["PHPUnit / Pest"] --> B["Package TestCase<br>extends Orchestra\\Testbench\\TestCase"]
    B --> C["Enregistrement des<br>service providers via getPackageProviders()"]
    C --> D["Démarrage d'une app Laravel en mémoire"]
    D --> E["Vérification des fonctionnalités du package"]
```

## Installation

<Steps>
  <Step title="Installer Testbench">
    ```bash theme={null}
    composer require --dev orchestra/testbench
    ```
  </Step>

  <Step title="Créer un TestCase de base">
    ```php theme={null}
    <?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,
            ];
        }
    }
    ```
  </Step>

  <Step title="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`.

    ```php theme={null}
    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);
    }
    ```
  </Step>
</Steps>

## 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 theme={null}
<?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 theme={null}
<?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');
    }
}
```

```php theme={null}
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](https://packages.tools/testbench) officielle pour les détails.

| Laravel | Testbench |
| ------- | --------- |
| 12.x    | 10.x      |
| 13.x    | 11.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](/fr/advanced/package-versioning).

```yaml theme={null}
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

<Columns cols={2}>
  <Card title="Développement de packages Laravel" icon="box" href="/fr/advanced/package-development">
    Passez en revue les fondations d'une implémentation de package centrée sur le service provider.
  </Card>

  <Card title="Gestion de la compatibilité de versions de package" icon="git-branch" href="/fr/advanced/package-versioning">
    Passez en revue la stratégie de versions Laravel/Testbench et la matrice de CI.
  </Card>
</Columns>


## Related topics

- [Développer un package avec Testbench Workbench](/fr/advanced/package-workbench.md)
- [GeneratorCommand — implémenter des commandes make: personnalisées](/fr/advanced/generator-command.md)
- [CHANGELOG et gestion des releases de packages](/fr/advanced/package-changelog.md)
- [Analyse statique de packages (PHPStan / Larastan)](/fr/advanced/package-static-analysis.md)
- [Développement de packages Laravel](/fr/advanced/package-development.md)
