Introduzione
Laravel offre un’API ricca per simulare richieste HTTP e verificarne le risposte. Puoi riprodurre nei test le richieste all’applicazione senza avviare un vero server HTTP.get() invia una richiesta GET all’applicazione e assertStatus() verifica il codice HTTP.
Durante l’esecuzione dei test il middleware CSRF è disabilitato automaticamente. Non è necessario disabilitarlo esplicitamente.
Effettuare richieste
Nei test puoi usare i metodiget, post, put, patch, delete.
Non fanno vere richieste di rete, ma simulano internamente. Restituiscono un’istanza di Illuminate\Testing\TestResponse con molti metodi di asserzione.
Header di richiesta
ConwithHeaders() personalizzi gli header.
Cookie
ConwithCookie() o withCookies().
Sessione e autenticazione
ConwithSession() imposti dati di sessione.
actingAs() esegui come utente autenticato.
Debug delle risposte
Test delle eccezioni
Con la facadeExceptions.
Test di API JSON
Laravel offre helper per JSON:json, getJson, postJson, putJson, patchJson, deleteJson, optionsJson.
assertJson() verifica che i dati indicati siano contenuti nella risposta JSON. Il test passa anche se la risposta ha proprietà aggiuntive.Corrispondenza esatta
JSON path
Test JSON fluente
Collection JSON
each():
Type assertion
string, integer, double, boolean, array, null.
Test di autenticazione
Esempio: registrazione utente
Test di sessione
Elenco delle asserzioni di sessione
Test di upload file
ConUploadedFile::fake() e Storage::fake().
Personalizzare i file finti
Test di viste
Senza simulare la richiesta HTTP puoi renderizzare direttamente la vista.TestView fornisce:
Contenuto come stringa:
Test di componenti
Elenco delle asserzioni sulle response
Metodi principali della classeIlluminate\Testing\TestResponse.
Status HTTP
Redirect
Contenuto
JSON
Header e cookie
Viste
Validazione
Consigli per il TDD
Parti dai feature test
Parti dai feature test
Metti i test HTTP in
tests/Feature/. Descrivere il comportamento dall’esterno (richiesta → risposta) chiarisce cosa implementare.Usa RefreshDatabase
Usa RefreshDatabase
Nei test che usano il DB usa il trait
RefreshDatabase. Il DB viene resettato dopo ogni test evitando interferenze.Sfrutta le factory
Sfrutta le factory
Con
User::factory()->create() crei rapidamente dati di test. Definisci gli stati (state) per test più leggibili.1 test, 1 asserzione
1 test, 1 asserzione
Verifica una cosa per test per identificare più facilmente la causa dei fallimenti. Segui lo schema AAA (Arrange, Act, Assert).
Non dimenticare i test di autenticazione
Non dimenticare i test di autenticazione
Per le route protette scrivi sempre sia il caso “autenticato” sia “non autenticato”. Prevengono problemi di sicurezza.
Pagine correlate
Introduzione al testing
Le basi dei test in Laravel e l’uso di
php artisan test.