Skip to main content

Cos’è il testing

Il testing è il meccanismo che verifica automaticamente che il codice funzioni come previsto. Scrivere test ti permette di verificare rapidamente che aggiungere o modificare funzionalità non rompa il comportamento esistente. Nello sviluppo in team i test danno sicurezza nel modificare il codice e nelle code review. Laravel supporta il testing fin dall’inizio: puoi usare sia Pest sia PHPUnit. Alla creazione del progetto trovi automaticamente il file phpunit.xml e la directory tests/.
Pest è costruito su PHPUnit e permette di scrivere test con una sintassi più concisa e leggibile. Se inizi ora, ti consigliamo Pest.

Struttura della directory tests/

  • Feature/ — Feature test: test di grande granularità che includono richieste HTTP. Verificano il funzionamento di più oggetti insieme o endpoint API, quindi test più vicini all’applicazione completa. La maggior parte dei test starà qui.
  • Unit/ — Unit test: test di piccola granularità per singola classe o metodo. L’applicazione Laravel non viene avviata, quindi non puoi usare database o altre funzionalità del framework.

Creazione di un test

Con il comando Artisan make:test generi una nuova classe di test.
Viene generato tests/Feature/TodoTest.php.

Esecuzione dei test

Esegui i test con il comando php artisan test.
Puoi eseguire direttamente vendor/bin/pest o vendor/bin/phpunit per lo stesso risultato, ma php artisan test mostra un output più leggibile ed è consigliato. Per eseguire solo una suite:

Come scrivere test base

Esempio di asserzioni semplici.

Asserzioni più comuni

Test HTTP

Con i test HTTP di Laravel puoi simulare richieste alle route senza avviare un vero server HTTP. È una funzionalità potente delle classi di test nella directory Feature/.

Verifica della visualizzazione di una pagina

Con get() invii una richiesta GET e verifichi la response.

Esempio di test HTTP di un’app ToDo

Con un’app che ha il modello Todo, testiamo le operazioni CRUD.

Asserzioni comuni sulle response

Con il trait RefreshDatabase il database viene resettato dopo ogni test. Serve a evitare che i dati interferiscano tra i test.

Ambiente di test

Configurazione di phpunit.xml

Configura l’ambiente di test nel file phpunit.xml nella root del progetto. Di default sessione e cache usano il driver array, così i dati non permangono tra i test.
Per il database è comune usare SQLite in-memory, che non lascia file.

File .env.testing

Creando .env.testing nella root del progetto, verrà usato al posto di .env durante i test. Utile se vuoi separare connessioni al database o servizi esterni dedicati ai test.
Se hai cache di configurazione, esegui php artisan config:clear prima dei test. Altrimenti potrebbe essere usata una cache obsoleta.

Esecuzione parallela dei test

Con l’aumentare del numero di test cresce anche il tempo di esecuzione. Con l’opzione --parallel esegui i test su più processi contemporaneamente per ridurre i tempi. Installa prima il pacchetto brianium/paratest.
Esegui con l’opzione --parallel.
Di default vengono creati tanti processi quanti sono i core della CPU. Per indicare il numero usa --processes.
Con i test paralleli ogni processo deve usare un database indipendente. La combinazione del trait RefreshDatabase con SQLite in-memory in phpunit.xml funziona senza problemi.

Prossimi passi

Test HTTP

Approfondisci simulazione delle richieste, test autenticati, asserzioni JSON e altri aspetti.
Ultima modifica il 13 luglio 2026