Come effettuare i test con Pest in Laravel

Pest è un framework di testing moderno e minimalista per PHP, progettato per rendere i test più leggibili e veloci da scrivere. Laravel lo supporta perfettamente e lo rende una scelta popolare per chi desidera scrivere test puliti e comprensibili.

Installazione di Pest

Per iniziare, è necessario installare Pest all'interno di un progetto Laravel esistente. Usa Composer per aggiungerlo come dipendenza di sviluppo:

composer require pestphp/pest --dev

Successivamente, inizializza Pest con:

php artisan pest:install

Questo comando creerà i file di configurazione e convertirà eventuali test esistenti in formato compatibile con Pest.

Scrivere un test di base

I test scritti con Pest sono molto leggibili. Ecco un esempio di test di base:

test('la homepage è accessibile', function () {
    \$response = \$this->get('/');

    \$response->assertStatus(200);
});

La funzione test() è un helper fornito da Pest. All'interno del blocco puoi usare i metodi forniti da Laravel per l'interazione con il framework.

Testare un controller

Puoi testare un controller come segue:

test('un utente può visualizzare la propria dashboard', function () {
    \$user = User::factory()->create();

    \$response = \$this->actingAs(\$user)->get('/dashboard');

    \$response->assertOk();
    \$response->assertSee('Benvenuto');
});

Utilizzare dataset nei test

Pest supporta i dataset per test parametrizzati. Ecco un esempio:

dataset('status_codes', [
    [200, '/'],
    [302, '/login'],
]);

test('le rotte rispondono con lo status atteso', function (\$expected, \$uri) {
    \$response = \$this->get(\$uri);
    \$response->assertStatus(\$expected);
})->with('status_codes');

Conclusione

Pest è uno strumento potente e facile da usare per i test in Laravel. Offre una sintassi chiara e funzionalità avanzate come i dataset, i plugin e un'ottima integrazione con l'ecosistema Laravel. Adottarlo nel tuo flusso di lavoro può migliorare significativamente la qualità del codice e la produttività nel testing.

Torna su