Пакет не має власного застосунку - немає bootstrap/app.php, контейнера, конфігурації. Orchestra Testbench створює мінімальний Laravel-застосунок для тестів пакета.
composer require --dev orchestra/testbench pestphp/pest
Версії Testbench відповідають версіям Laravel:
| Testbench | Laravel |
|---|---|
| 9.x | 11.x |
| 10.x | 12.x |
| 11.x | 13.x |
Базовий тест-кейс:
namespace Acme\Invoices\Tests;
use Acme\Invoices\InvoicesServiceProvider;
use Orchestra\Testbench\TestCase as Orchestra;
abstract class TestCase extends Orchestra
{
protected function getPackageProviders($app): array
{
return [InvoicesServiceProvider::class];
}
protected function defineEnvironment($app): void
{
$app['config']->set('database.default', 'testing');
$app['config']->set('invoices.currency', 'UAH');
}
protected function defineDatabaseMigrations(): void
{
$this->loadLaravelMigrations();
$this->loadMigrationsFrom(__DIR__.'/../database/migrations');
}
}
// tests/Pest.php
uses(Acme\Invoices\Tests\TestCase::class)->in(__DIR__);
Тепер у тестах працює все, що й у застосунку: HTTP-тести маршрутів пакета, фабрики, Mail::fake(), artisan():
it('generates an invoice pdf', function () {
$this->get('/invoices/1/pdf')->assertOk()->assertHeader('content-type', 'application/pdf');
});
it('publishes the config', function () {
$this->artisan('vendor:publish', ['--tag' => 'invoices-config'])->assertSuccessful();
});
Workbench - для ручної перевірки: vendor/bin/testbench workbench:install створює каталог workbench/ з маршрутами й моделями, а vendor/bin/testbench serve запускає вебсервер з підключеним пакетом.
Що обов'язково протестувати в пакеті:
- пакет працює без опублікованої конфігурації;
- реєстрація провайдера не падає за відсутності необов'язкових залежностей;
- міграції застосовуються й відкочуються;
- поведінку на всіх підтримуваних версіях Laravel і PHP - матриця в CI (
laravel: [12.*, 13.*]з відповідними версіями Testbench); --prefer-lowestу CI - що пакет справді працює з мінімальними версіями, вказаними вcomposer.json.